首页 > 解决方案 > 指向智能指针的指针,用途

问题描述

谁能解释这是如何工作的。

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

我应该做delete p; p = NULL;

谢谢

标签: shared-ptrsmart-pointers

解决方案


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

这是非常不习惯的,不推荐,不是好的设计。

shared_ptr<T>用于自动内存管理:您不必deleteshared_ptr. 你需要确保

  • x指向T分配的对象new
  • 没有其他代码尝试解除分配x

出于某种原因,代码分配一个shared_ptrwith new自动内存shared_ptr管理工具(避免忘记删除或过早删除的风险。deleteshared_ptr

我应该做delete p; p = NULL;

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

一个类比是有一个闹钟来叫醒你,在时间 T 设置闹钟,取出时钟中的电池,然后让朋友在时间 T 将电池放回闹钟中,这样它就可以唤醒你.

无论如何,您应该质疑生成此类代码的工具的质量。


推荐阅读