C++使用DELL[]删除指针?

C++使用DELL[]删除指针?,c++,memory-management,C++,Memory Management,以下是C++中的示例代码: Foo *ptr; ptr = new Foo; delete [] ptr; 这会有问题吗?删除这样一个指针并释放内存的正确方法应该是什么 谢谢delete[]用于删除动态分配对象的数组,这与您的情况不同。这里,使用delete-ptr;很好 当分配单个元素时,如int*pointer=newint 删除指针 分配元素数组时,如int*pointer=newint[5] 删除[]指针 是的,那可能会遇到问题。或者不是。从技术上讲,它的作用还没有定义 每一个新的必须

以下是C++中的示例代码:

Foo *ptr;
ptr = new Foo;
delete [] ptr;
这会有问题吗?删除这样一个指针并释放内存的正确方法应该是什么

谢谢

delete[]用于删除动态分配对象的数组,这与您的情况不同。这里,使用delete-ptr;很好

当分配单个元素时,如int*pointer=newint

删除指针

分配元素数组时,如int*pointer=newint[5]

删除[]指针


是的,那可能会遇到问题。或者不是。从技术上讲,它的作用还没有定义

每一个新的必须有一个删除;每个新[]必须有一个删除[]

在您的特定实例中,正确的代码路径可能是:

Foo *ptr;
ptr = new Foo;
delete ptr;


您应该在不使用[]的情况下删除它。只需简单删除:


很可能会导致问题,因为delete[]需要存储数组中的元素数,以便知道调用析构函数的次数。由于新的Foo不必存储这些信息,因为delete不需要这些信息,所以delete[]完全有可能使用垃圾作为输入

如果是单个对象,请删除;如果要删除数组,请删除[]。您是否真的因为在其他任何地方都找不到任何信息而要求使用“新建”和“删除”的正确方法?在发布问题之前,请自己花点时间学习这门语言。将所有删除内容与新闻匹配,将所有删除内容与新xyz[]s匹配。当然,从来没有任何情况下您会使用新的Foo[7],因此从来没有任何情况下需要删除[]。
Foo *ptr;
ptr = new Foo[7];
delete[] ptr;
Foo *ptr;
ptr = new Foo;
delete ptr;