我已经搜索过,但是没有找到类似的主题。
如果我有一个对象类,例如class Object { ... };
,并且有这个指针:Object* p = new Object();
我想知道删除此指针的正确方法是什么,
delete (Object*) p;
或者这个:
delete[] p;
我无法确定哪个是正确的,如果有人可以告诉我什么是对的,我会很高兴。 谢谢<3
答案 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>();
。这样,分配将自动删除,并且编写错误会更加困难。还要考虑是否首先需要动态分配。不必要时应避免使用。