在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有区别?详细说明下
3个回答
展开全部
C++标准上规定的是:new出来的空间,必须由delete释放,new []出来的空间,必须由delete[] 释放。如果混用,会导致未定义行为。
所谓未定义行为顾名思义,C++标准中未定义,结果可能很正常,也可能不对头,甚至可能让你的程序崩溃。
实际上部分编译器中,一般情况下你一定程度的混用也是ok的(但也仅限于简单数据,如果是重载了operator new[]/delete[]的代码,可能导致灾难性的后果),但不代表所有编译器都如此,因为这个不是C++标准上的规定。所以强烈建议不应混用delete和delete[],必须和new/new[]配对使用。
参见C++大师Marshall Cline写的C++FAQ中16.11章节:
所谓未定义行为顾名思义,C++标准中未定义,结果可能很正常,也可能不对头,甚至可能让你的程序崩溃。
实际上部分编译器中,一般情况下你一定程度的混用也是ok的(但也仅限于简单数据,如果是重载了operator new[]/delete[]的代码,可能导致灾难性的后果),但不代表所有编译器都如此,因为这个不是C++标准上的规定。所以强烈建议不应混用delete和delete[],必须和new/new[]配对使用。
参见C++大师Marshall Cline写的C++FAQ中16.11章节:
参考资料: http://www.sunistudio.com/cppfaq/freestore-mgmt.html#[16.11]
展开全部
对于分配的基本数据类型空间时,delete和delete[]是一样的;
但对于自己定义的类,当用new[]分配空间时,delete只会释放第一个,而delete[]则会释放所有。
所以,简单点说,记住这个使用原则:new 和 delete配套使用,new[] 和 delete[] 配套使用。
但对于自己定义的类,当用new[]分配空间时,delete只会释放第一个,而delete[]则会释放所有。
所以,简单点说,记住这个使用原则:new 和 delete配套使用,new[] 和 delete[] 配套使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在C++中new和delete是一组开辟/删除单个空间,new[]和delete[]是一组开辟/删除连续多个空间。不能混用的,会产生不可预知的后果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询