C++中delete语句能动态撤销静态创建的对象吗?

Ansyral 2009-04-18 03:36:46
比如我静态创建一个对象A a;A *p=&a(A为自定义的类),那么语句delete p;能动态调用析构函数撤销a的空间吗?
谢谢了~~
还有就是delete 指针;就是将该指针指向的空间释放,那么为什么还要加写一句 指针=NULL;?
...全文
346 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
三分001 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqwx_1986 的回复:]
C/C++ code1.

t=NULL;
...
delete t;//很安全
[/Quote]

这样貌似不行吧?我觉得应该
delete t;
t=NULL;
qiance 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jackyjkchen 的回复:]
引用 8 楼 Ansyral 的回复:
第二个问题大致弄清楚了,就是说因为在编程中每使用指针前都会检查其是否为空,根据这个机制,当释放空间后就将指针置空,以后使用中更安全。不过“空指针”和“野指针”不同吗?我以前都认为野指针指向不存在的空间就是什么也不指向呢~
第一个问题谁能帮忙回答一下,谢谢了~~


delete运算符相当于两行语句;
~A;
free(A);

明白了么,free释放空间,~A是析构函数,也就是说,空间…
[/Quote]
Ansyral 2009-04-18
  • 打赏
  • 举报
回复
第一个问题,我综合一下大家的说法,觉得应该是不能delete静态创建的对象的
Ansyral 2009-04-18
  • 打赏
  • 举报
回复
谢谢了~~大家都好热情啊,谢谢
jackyjkchen 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Ansyral 的回复:]
第二个问题大致弄清楚了,就是说因为在编程中每使用指针前都会检查其是否为空,根据这个机制,当释放空间后就将指针置空,以后使用中更安全。不过“空指针”和“野指针”不同吗?我以前都认为野指针指向不存在的空间就是什么也不指向呢~
第一个问题谁能帮忙回答一下,谢谢了~~
[/Quote]

delete运算符相当于两行语句;
~A;
free(A);

明白了么,free释放空间,~A是析构函数,也就是说,空间已释放
Ansyral 2009-04-18
  • 打赏
  • 举报
回复
第二个问题大致弄清楚了,就是说因为在编程中每使用指针前都会检查其是否为空,根据这个机制,当释放空间后就将指针置空,以后使用中更安全。不过“空指针”和“野指针”不同吗?我以前都认为野指针指向不存在的空间就是什么也不指向呢~
第一个问题谁能帮忙回答一下,谢谢了~~
zgjxwl 2009-04-18
  • 打赏
  • 举报
回复
NULL使得指针不再引用任何有效的内存了。。
Jinhao 2009-04-18
  • 打赏
  • 举报
回复
>>还有就是delete 指针;就是将该指针指向的空间释放,那么为什么还要加写一句 指针=NULL;?

表示那个指针是空指针,没有引用任何内存,下次要使用该指针,在使用之前就先判断是否为0,如果为0就记得先分配内存.

if(指针 == 0)
指针 = new 类型;

*指针 = xxx; //使用

规则就是,如果指针为0,表示空指针
jackyjkchen 2009-04-18
  • 打赏
  • 举报
回复
是通常,不是用场,晕
Paradin 2009-04-18
  • 打赏
  • 举报
回复
没看到。。不该delete栈上开的对象,会有问题。
jackyjkchen 2009-04-18
  • 打赏
  • 举报
回复
如果不加上指针=NULL,该指针会变成野指针——指针依然存在,却指向无效内存(delete过了),delete运算符只释放空间,不删除指针,一旦后面又用到了这个指针,就会出错,而置为NULL,用场编程时都会加上指针是否为NULL的检查,就没事,而不置零的话是检查不出来的
qqwx_1986 2009-04-18
  • 打赏
  • 举报
回复

1.
delete 是干什么的?
删除动态申请的对内存
2.
T *t=new T();
delete t;
...
delete t;//会发生什么?

delete t;
t=NULL;
...
delete t;//很安全
Paradin 2009-04-18
  • 打赏
  • 举报
回复
1.可以,delete时调用了析构函数(一般设为虚函数)
2.防止不小心delete两次;习惯。
delete p, ... delete p: 这样运行时有问题。
delete p, p = NULL, delete p:这样运行没问题
但delete两次至少逻辑上是错的

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧