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;
};
答案 0 :(得分:3)
从这个角度来看,除非动态分配内存,否则成员对象安全。所以,不,你不需要将它包装在智能指针中。
具体而言fooInBar
,作为Bar
的子对象,它将被Bar
的析构函数自动销毁。 fooInt
中的Foo
也是如此。
最后,除非你真的需要动态内存,否则你也可以首先避免使用智能指针:
int _tmain(int argc, _TCHAR* argv[])
{
Bar myBar;
}
答案 1 :(得分:1)
你不必。由于fooInBar
是Bar
类型对象内的子对象,因此当1}}对象被释放时,它将被作为对象的一部分销毁。智能指针。
但是,如果Bar
在堆上单独分配,则应在包含fooInBar
对象被销毁之前先释放它。例如。在Bar
的析构函数中销毁它。
Bar