我是否必须手动重置内部shared_ptrs(shared_ptrs作为类的成员)

问题描述 投票:0回答:1

假设我有:

class InnerClass { };

class MyClass {
public:
    std::shared_ptr<InnerClass> innerSharedPtr;
};

void main() {
    std::shared_ptr<MyClass> mrSharedPtr = std::make_shared<MyClass>();
}

如果我想重置mrSharedPtr,我需要重置它的shared_ptr成员吗?

mrSharedPtr->innerSharedPtr.reset();
mrSharedPtr.reset();

如果我 mrSharedPtr.reset(),它会将引用计数减少到 0,但这是否会将innerSharedPtr 减少到 0?如果不是,是否意味着innerSharedPtr仍保留在内存中?

重置后无法查看引用计数

c++ shared-ptr reset
1个回答
0
投票

std::shared_ptr::reset
(来自cppreference):

如果

*this
已经拥有一个对象,并且是最后一个
shared_ptr
拥有该对象,则该对象将通过拥有的删除器被销毁。

MyClass
实例被销毁时,其中一部分是销毁
innerSharedPtr
成员。当此
shared_ptr
是指向该
InnerClass
的最后一个共享指针时,该实例也将被销毁。

无需在

mrSharedPtr->innerSharedPtr.reset();
之前致电
mrSharedPtr.reset();

© www.soinside.com 2019 - 2024. All rights reserved.