Ily*_*pov 18 c++ shared-ptr weak-ptr make-shared c++11
a的控制块shared_ptr保持活动,同时存在至少一个weak_ptr存在.如果创建共享指针make_shared,则意味着保持分配对象的整个内存.(对象本身被正确销毁,但由于控件块和对象的内存分配在一个块make_shared中,因此它们只能一起解除分配.)
我的理解是否正确?
看起来这种行为代表了一个问题,例如在着名的"缓存示例"中.对象的内存将永远分配.
这在任何实际情况下都是一个问题吗?应该shared_ptr在这种情况下使用构造函数创建(大对象和意图使用weak_ptrs)?
T.C*_*.C. 11
我的理解是否正确?
是.如果你的weak_ptrs(显着)比(大)物体长得多,并且你的记忆力很差,那么避免它可能是有益的make_shared.
但是,这里的"大"是通过测量的sizeof,并且许多概念上"大"的对象(例如,大多数标准容器,除了std::array)都非常小,因为它们分配额外的内存来存储它们的内容,这将很快被释放因为对象被破坏了.