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/

10-11 16:04