指向智能指针的指针,目的

时间:2018-09-19 14:15:27

标签: shared-ptr smart-pointers

任何人都可以解释这是如何工作的。

shared_ptr<T> *p = new shared_ptr<T>(x);

我应该delete p; p = NULL;

谢谢

1 个答案:

答案 0 :(得分:0)

shared_ptr<T> *p = new shared_ptr<T>(x);

这是非常不习惯的做法,不建议使用,设计也不好。

shared_ptr<T>用于自动内存管理:您不必delete shared_ptr管理的对象。您需要确保

  • x指向分配有T的{​​{1}}对象
  • 没有其他代码尝试取消分配new

由于某种原因,代码为x分配了shared_ptr自动内存管理工具(new)是通过手动管理的>此处:您必须记住在不需要 it 时(而不是更早版本)shared_ptr delete,“ it”是唯一目的的工具是为了避免忘记删除或过早删除的风险。

  

我应该shared_ptr

是的,您需要delete p; p = NULL;,并且delete p;是可选的,但如果其他代码可能需要检查p = NULL;是否指向对象,则是必需的。

打个比方,是要有一个闹钟叫醒您,在时间T设置闹钟,从时钟中取出电池,然后请朋友在时间T将电池放回闹钟中,以便叫醒你。

无论如何,您应该质疑产生这种代码的工具的质量。