【发布时间】:2014-07-23 20:35:34
【问题描述】:
才刚刚开始研究智能指针以及如何使用它们来提高代码效率,我很好奇 shared_ptr 如何与数组/向量/容器中的类对象发生反应。
从我所读到的共享指针的一般要点是,一旦所有指向对象的指针都被销毁或重新分配,该对象也会被销毁。但是,如果我们的对象也存储在数组/向量中,那么即使对象仍可访问,共享指针是否仍会尝试销毁该对象。
是否有某种方法可以在考虑数组的情况下设置共享指针,这样您就可以确保仅在清除数组/向量后才删除对象,或者您是否也必须在数组中使用 shared_ptr ?
【问题讨论】:
-
你应该举一个例子来说明你的意思是“在一个数组/向量中”。但是,是的,如果所有
shared_ptrs 都消失了,它就会被销毁。 -
是的,使用
array或vector的shared_ptrs。 -
shared_ptr无法知道您的数组中有一个副本。 -
共享指针都是关于对象的所有权。如果一个对象是另一个对象的一部分,那么它就归另一个对象所有。拥有第二个实体也试图拥有它是没有意义的。
-
@Incubbus 是和否。 weak_ptr 不会增加引用计数,但它也被设计为在它指向的对象被释放时允许正常失败。它不会阻止对象被释放,所以你仍然需要在使用它之前检查它是否有效。
标签: c++ arrays pointers smart-pointers