关于delete的使用方法.....

我经常看到有的用delete[]有的直接用delete.到底是什么情况下用delete[],什么情况下直接用delete?大哥们能说明下吗?最好用例子说明..这个没数组的... 我经常看到有的用delete[] 有的直接用delete.

到底是什么情况下用delete[],什么情况下直接用delete?

大哥们能说明下吗?最好用例子说明..
这个没数组的为什么也用delete[]?
#include<iostream>
#include<conio.h>

int* fn() {
int* ap = new int;
return ap;
}
int main() {
int* bp=fn();
*bp = 15;
std::cout<<*bp<<"\n";
delete[] bp;
getch();
}
展开
 我来答
疾似云流
2008-10-21 · TA获得超过1159个赞
知道小有建树答主
回答量:1093
采纳率:0%
帮助的人:484万
展开全部
该用delete[]的地方就应该用delete[], 不能用delete。
delete[]是用来删除动态分配的数组,delete是用来删除动态分配的单个对象。

而且相应的new形式要用相应的delete形式来匹配。(new[] - delete[], new - delete)

当我们是用new表达式的时候,系统主要会做两件事,一,就是调用标准库里的operator new函数给我们分配一块原始的内存区,operator new的功能和malloc差不多(其实operator new在底层也是调用malloc函数); 二,在这片原始的内存区上调用对象的构造函数构造一个对象。
用delete表达式的时候,步骤也是相应的。首先调用析构函数撤销掉内存区间上的一个对象,然后使用标准库的operator delete函数将内存区返回给操作系统。
所以在C++里会有重载operator new和operatordelete函数的说法,将内存分配的工作接管过来。

补充回答:
要被删除的指针指向的是单个对象呢,还是对象数组?这只有你显示编码来告诉delete。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。
如果你没有对数组对象用delete[]而是delete,或者对单个对象使用delete[]而不是delete,根据C++的标准,结果是未定义的。
什么叫未定义呢?就是可能正确,也可能不正确。
你的代码很简单,100行都不到,当然没什么问题,但是可以想一下要是一个10万行的代码出现这种错误呢?比如一个服务器程序,可能第一天运行正确,第二天就错误不断了。

总之,相应的new要用相应的delete形式。
具体细节可以参考<Effective C++>Item5. (业内戏称为50戒)

另外你那段代码严格来说是不正确的,可能是那本不太好的书上来的吧?
看书还是要看经典,就C++来讲2本书足矣,<C++ Primer>或者<The C++ Programming Language>加上<Effective C++>。
一米微读
2020-12-18 · 超过10用户采纳过TA的回答
知道答主
回答量:72
采纳率:100%
帮助的人:4.7万
展开全部

如何在Windows10系统使用reg delete指令

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fiona_feifei

2008-10-20 · TA获得超过819个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:147万
展开全部
不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式