Viz*_*zor 3 c++ shared-ptr weak-ptr make-shared c++11
我的问题是这个说法:
如果任何std :: weak_ptr在所有共享所有者的生命周期结束后引用由std :: make_shared创建的控制块,则T占用的内存将持续存在,直到所有弱所有者都被销毁,如果sizeof(T)是大.资源
我在这里读到,这个对象一直存在,直到最后一个weak_ptr存在.它是使用make_shared自由对象,循环引用self还是永远存在于内存中?
例如:
struct A
{
std::weak_ptr<A> parent;
}
void fn()
{
auto a=std::make_shared<A>();
a->parent = a;
} // Will it destroy here or not?
Run Code Online (Sandbox Code Playgroud)
ikh*_*ikh 11
它被摧毁了.这就是为什么weak_ptr存在的原因之一.
当a销毁时,引用计数器变为0,因此对象被销毁.这意味着对象的析构函数被调用,它a->parent也会被破坏.
不要将破坏与释放混淆.当引用计数器变为0或没有shared_ptr拥有该对象时,该对象将被销毁.如果有任何weak_ptr指向控制块的内存,则不会释放内存- 因为对象已分配std::make_shared- 但对象肯定会被销毁.