销毁外层std::shared_ptr时,是否需手动重置其成员std::shared_ptr?
问题解答
不需要先手动重置mrSharedPtr->innerSharedPtr,直接调用mrSharedPtr.reset()就足够了,具体原因如下:
- 当
mrSharedPtr.reset()使其引用计数降至0时,MyClass的实例会被自动销毁。 innerSharedPtr作为MyClass的成员变量,在MyClass实例销毁过程中,它的析构函数会被自动触发,这会将其指向的InnerClass实例的引用计数减1。如果此时InnerClass的引用计数也降到0,对应的实例就会被自动释放,不会有内存残留。
至于引用计数的问题:重置后确实无法直接查看计数,但只要遵循shared_ptr的使用规范,完全不需要手动管理引用计数,它的自动机制会保证资源被正确回收。
内容的提问来源于stack exchange,提问作者chatgptea
相关产品推荐
相关产品推荐

