当存在至少一个
我的理解正确吗?
这种行为似乎代表了一个问题,例如在著名的“缓存示例”中。对象的内存将永远被保留。
在任何实际情况下都是一个问题吗?在这种情况下(大对象和使用
weak_ptr
时,shared_ptr
的控制块将保持活动状态。如果使用make_shared
创建共享指针,则意味着整个对象的内存都被保留。(对象本身会被正确析构,但由于控制块和对象的内存是一起分配的,就像make_shared
一样,它们只能一起释放。)我的理解正确吗?
这种行为似乎代表了一个问题,例如在著名的“缓存示例”中。对象的内存将永远被保留。
在任何实际情况下都是一个问题吗?在这种情况下(大对象和使用
weak_ptr
的意图),是否应该使用构造函数创建shared_ptr
?
std::vector
组成的对象,因此当对象被销毁时,动态分配的内存将被释放。只有在对象本身的大小很大时,例如一个大的std::array
,你才需要担心。 - Chris Drewmake_unique
代替,然后从你的unique_ptr
构造一个shared_ptr
,例如std::shared_ptr<BigObject> ptr = std::make_unique<BigObject>();
。 - Chris Drew