C++11 在构造函数中使用unique_ptr
我正在做一个学校的项目,我不知道它的独特用法C++11 在构造函数中使用unique_ptr,c++11,constructor,C++11,Constructor,我正在做一个学校的项目,我不知道它的独特用法 class ClassName { private: unique_ptr <bool[]> uniquePtr; void func(unique_ptr<bool[]>& refPtr) const { refPtr[0] = true; refPtr[1] = false; } public: //oth
class ClassName
{
private:
unique_ptr <bool[]> uniquePtr;
void func(unique_ptr<bool[]>& refPtr) const
{
refPtr[0] = true;
refPtr[1] = false;
}
public:
//other things that will use the array uniquePtr
};
ClassName::ClassName()
{
bool* boolName = new bool [someSize()];
uniquePtr = unique_ptr<bool[]>(boolName);
func(uniquePtr);
for(int i =0; i<someSize(); i++)
{
cout << uniquePtr[i];
//This is all O's
}
}
这不起作用,因为在func完成时,uniquePtr被设置为所有0。我不知道如何修改uniquePtr,以便我的其他功能可以访问它。我没有尝试过创建一个新的唯一的\u ptr来传递到func中,然后使用moveuniquePtr,但这甚至不会编译
如果uniquePtr被一个函数修改,在这种情况下,将其赋值为布尔值1或0,那么类中该函数之外的函数不应该访问它吗?如果我在函数中打印uniquePtr[index],它会给出预期的结果
谢谢你的帮助 通过引用将唯一的\u ptr传递给函数不会破坏它,因此您在这里是安全的
但是,通过引用传递unique_ptr可能不是表达想法的最佳方式。在C++中,一个非拥有的指针用一个简单的C样式指针表示,所以这样做是安全和习惯的:
void func(bool (*ptr)[]) const { ...
然后
func(uniquePtr.get());
如评论中所述,数据成员应按以下方式进行初始化:
ClassName::ClassName() : unique_ptr(new bool[someSize()]) {
func(uniquePtr.get());
}
使用std::make_unique而不是new如果可以uniquePtr的可能副本在func完成时被销毁了不,为什么你会这么认为?@hellow OP应该使用bases members initialiser,但这与所问的问题无关。uniquePtr是一个非静态成员,因此,它的生存期连接到ClassName对象的生存期。您有什么具体的问题使您得出这样的结论:func不起作用?func的目的是什么?为什么它必须是非静态的?为什么它必须是const合格的?为什么需要将指向函数的指针作为参数传递?你不能简单地像其他普通成员变量一样使用它吗?我的意思是当func完成时,uniquePtr被删除。我之所以这样认为是因为每当我尝试访问uniquePtr[index]时,它都被设置为0。@jav_solo请问一个问题,并展示一下你的尝试。如果您试图访问uniquePtr[index]但它不起作用,那么执行该操作的代码应该是有问题的。再问一个问题并提供答案。我已经更新了这个问题以反映我的误解。@jav_solo不,你应该问一个新问题并提供答案。请仔细阅读这意味着什么。因为你提供的是我投票结束这个问题。