class Foo
{
public:
int fooInt;
};
class Bar
{
Foo fooInBar;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::unique_ptr<Bar> myBar = std::make_unique<Bar>();
}
我知道
myBar
由智能指针拥有,可以很好地防止内存泄漏。Foo对象
fooInBar
是否也仅受myBar
内部的保护,还是成员变量fooInBar
也应包含在智能指针中?像这样:class Bar:
fooInBar(make_unique<Foo>())
{
std::unique_ptr<Foo> fooInBar;
};
最佳答案
从这个 Angular 来看,除非动态分配内存,否则成员对象是安全的。因此,不,您不需要将其包装在智能指针中。
特别是fooInBar
,它是Bar
的子对象,它将被Bar
的析构函数自动销毁。 fooInt
中的Foo
也是如此。
最后,除非您确实需要动态内存,否则还可以首先避免使用智能指针:
int _tmain(int argc, _TCHAR* argv[])
{
Bar myBar;
}
关于c++ - C++。类实例的成员对象的智能指针,实例本身由智能指针拥有。必要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23207738/