如何删除对象的指针?

时间:2019-06-15 14:33:49

标签: c++ pointers free

我已经搜索过,但是没有找到类似的主题。

如果我有一个对象类,例如class Object { ... };,并且有这个指针:Object* p = new Object();

我想知道删除此指针的正确方法是什么,

delete (Object*) p;

或者这个:

delete[] p;

我无法确定哪个是正确的,如果有人可以告诉我什么是对的,我会很高兴。 谢谢<3

2 个答案:

答案 0 :(得分:1)

如果仅使用new运算符分配单个对象,则应使用delete释放该对象。如果您正在使用new[]运算符(即数组形式)一次分配多个对象,则应使用delete[]来相应地删除这些对象。

请参阅:http://www.cplusplus.com/reference/new/operator%20delete/http://www.cplusplus.com/reference/new/operator%20delete[]/

答案 1 :(得分:0)

  

是这个吗?

delete (Object*) p;

不是。无需将类型Object*的对象强制转换为类型Object*。那是多余的。此外,应避免使用C样式的强制转换。

  

或者这个:

delete[] p;

不是。 delete[]必须仅与new[]表达式返回的指针一起使用。您没有使用new[],因此您可能没有使用delete[]。您使用了new,因此必须使用delete

正确的方法是delete p;。但是,一开始您可能不应该完成Object* p = new Object();。而是使用auto p = std::make_unique<Object>();。这样,分配将自动删除,并且编写错误会更加困难。还要考虑是否首先需要动态分配。不必要时应避免使用。