weak_ptr,make_shared和内存释放

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)都非常小,因为它们分配额外的内存来存储它们的内容,这将很快被释放因为对象被破坏了.