在构造函数中将一个动态分配的数组分配给一个独特的智能指针成员变量

4
在下面的示例中,我有一个智能指针sp作为成员变量,并且我想在构造函数中将动态分配的数组分配给它,但是我得到了一个编译器错误no match for 'operator=',正确的方式是什么?
在下面的示例中,我有一个智能指针sp作为成员变量,并且我想在构造函数中将动态分配的数组分配给它,使用智能指针的reset()方法是正确的方法吗?还是应该使用共享智能指针?
struct SampleStructure
{
std::unique_ptr<idx_t[]> sp;

SampleStructure(int a, int b){

    sp.reset(new idx_t[a + 1]); 
 }
};
1个回答

5
您无法使用operator=,因为std::unique_ptr不能直接从原始指针分配,就像您展示的那样,您必须使用reset(),它将替换托管对象(在unique_ptr初始化后)。
您可以通过构造函数中的成员初始化列表直接初始化数据成员sp;然后您不需要“赋值”(替换)。例如:
SampleStructure(int a, int b) : sp(std::make_unique<idx_t[]>(a + 1)) {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接