我正在尝试真正从 c++98 迁移到 c++11 及更高版本。我已经了解了大部分新内容,但我仍然不确定 unique_ptr
的正确用法。
考虑下面的示例,其中类 A 有一个 unique_ptr 成员(我之前会使用原始指针!)。当用户需要时,应该通过在其他地方(不是类的一部分)调用函数来分配这个成员变量。这是正确的用法吗?如果没有,最好的选择是什么?
class A {
private:
unique_ptr<MyType> mt;
public:
void initStuff() {
mt.reset(std::move(StaticFuncSomewhereElese::generateMyType()));
}
};
MyType* StaticFuncSomewhereElese::generateMyType() {
MyType* temp = new MyType(...);
//do stuff to temp (read file or something...)
return temp;
}
原文由 EMBEDONIX 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的代码工作正常(尽管可以省略冗余\*
move
),但最好尽早构造unique_ptr
:这样很明显,调用者必须删除
generateMyType
的返回值,并且内存泄漏的可能性较小(例如如果generateMyType
提前返回)。\*
move
是多余的,因为:generateMyType()
表达式的结果无论如何已经是一个右值。