【发布时间】:2018-08-31 11:14:03
【问题描述】:
我正在做一个学校项目,但我无法弄清楚 unique_ptr 的用法。
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 以便我的其他功能可以访问它。我没有尝试创建一个新的 unique_ptr 来传递给 func() 然后使用 move(uniquePtr) 但这甚至不会编译。
如果 uniquePtr 被一个函数修改,在这种情况下将其分配为布尔值 1 或 0,那么在类中的函数之外是否应该可以访问它?如果我在函数中打印 uniquePtr[index] 它会给我预期的结果。
感谢您的帮助!
【问题讨论】:
-
uniquePtr 在 func() 完成时被销毁不,不是,你为什么会这样认为?
-
@hellow OP 应该使用 bases-members-initialiser,但这与所提出的问题无关。
-
uniquePtr是一个非静态成员,因此它的生命周期与ClassName对象的生命周期相关。你有什么具体的问题让你得出“这行不通”的结论? -
func的目的是什么,为什么它必须是非静态的?为什么它必须是const合格的?为什么需要将指向函数的指针作为参数传递?你不能像任何其他普通成员变量一样简单地使用它吗?
标签: c++11 constructor