首页 > 其他 > 详细

delete *p可以替代delete[] p吗?

时间:2019-04-06 00:41:28      阅读:195      评论:0      收藏:0      [点我收藏+]

 在stackoverflow看到一个标题描述的问题,问题链接是:https://stackoverflow.com/questions/55524140/is-delete-p-an-alternative-to-delete-p/55524252#55524252。下面一起来看看它。

有一段来自微软官方文档的代码:

1 int (**p)() = new (int (*[7])());
2 delete *p;

问题的发起者认为应该用delete[] p来替换这里的delete *p。

下面有一些回答:

1、p[0]是没有被初始化的,会导致编译错误。

2、应该用delete[]来释放new[]创建的对象;用delete来释放new创建的对象。

3、这个描述是错误的因为只有指针指向的对象才可以被释放。*p的类型是int (*)(),它是一个指向函数的指针,不是指向对象的指针。

我们用Visual Studio 2017和g++都测试一下,

Visual Studio 2017中:

技术分享图片

技术分享图片

g++中:

技术分享图片

技术分享图片

 

总结:

1、用delete释放new创建的对象,用delete[]释放new[]创建的对象;

2、delete释放的必须是堆中的对象。

 

理解如果有什么不对的地方,请大家指针,谢谢。

delete *p可以替代delete[] p吗?

原文:https://www.cnblogs.com/zpchya/p/10660512.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!