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

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

 int (**p)() = new (int (*[])());
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吗?的更多相关文章

  1. 浅谈c++ new and delete or new [] and delete []

    http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问 ...

  2. mssql的delete用用到被delete的表的别名

    +' delete m from '+@strDBName +'.dbo.m_device as m where not exists ' +' (select 1 from @tmpDevice w ...

  3. 什么时候可以用delete替代delete[]

    针对gcc编译器 C++内存分配和释放函数 //分配单个对象 operator new(std::size_t size) //分配数组对象 operator new[](std::size_t si ...

  4. oracle 用TRUNCATE替代DELETE

    当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务, ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到 ...

  5. delete,truncate 和 delete之间的区别

    1.首先看下语法定义: drop table_name truncate table_name delete table_name [where column_name = value] 2.各个删除 ...

  6. RequestMethod.DELETE相关,如何用jquery实现RequestMethod.DELETE请求

    Spring MVC添加支持Http的delete.put请求!(HiddenHttpMethodFilter) Spring3.0之后->Spring MVC过滤器-HiddenHttpMet ...

  7. Effective C++ 第二版 5)new和delete形式 6) 析构函数里的delete

    内存管理 1)正确得到: 正确调用内存分配和释放程序; 2)有效使用: 写特定版本的内存分配和释放程序; C中用mallco分配的内存没有用free返回, 就会产生内存泄漏, C++中则是new和de ...

  8. 定制自己的new和delete:operator new 和 operator delete

    new和delete不同用法 基本用法 int * aptr = new int(10); delete aptr, aptr = nullptr; 上面的代码是我们最基本也是最常见的使用new和de ...

  9. SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用

    以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select  字段名  from  表名 此种查询只列出你所需要查询的字段, ...

随机推荐

  1. Java 学习笔记 线程控制

    题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...

  2. mac IntelliJ Idea添加schema和dtd约束提示

    打开设置 找到Schemac and DTDs 配置约束文件

  3. 常见六大Web安全攻防解析

    前言 在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷.如何才能更好地保护我们的数据?本文主要侧重于分析几种常见的攻击的类型以及防御的方法. 想阅读更多优质原创文章请猛 ...

  4. vue2.x 时间范围 date range timepicker。只在项目中使用elementUI的date-picker

    elementUI官方案例:http://element.eleme.io/#/zh-CN/component/date-picker (1)效果图: (2)安装和引入 npm i element-u ...

  5. dns server 域名解析总结

    1.客户有两种使用公网域名解析的方法,一种是,直接配置A记录,将域名直接解析到ip地址.第二种是,配置NS记录,将对这个域名的解析分配给另外一个域名服务器,这个域名服务器就是客户自己搭建的内部域名服务 ...

  6. 开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法

    开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法: 创建存储过程时 出错信息: ERROR 1418 (HY ...

  7. 网上都没有提到的教程:python捕获异常后,怎么输出错误文件和行号

    1.假设输出不存在的变量 a try: print(a) except NameError as e: print('发生错误的文件:', e.__traceback__.tb_frame.f_glo ...

  8. 20181112-PostgreSQL数据库dmp文件导入(记录一次数据导入)

    20181112-PostgreSQL数据库dmp文件导入 标注:dmp文件导入,场景:多个schema导入 1. 环境准备: postgres集群master节点上,postgres用户执行以下操作 ...

  9. c/c++ linux 进程间通信系列6,使用消息队列(message queue)

    linux 进程间通信系列6,使用消息队列(message queue) 概念:消息排队,先进先出(FIFO),消息一旦出队,就从队列里消失了. 1,创建消息队列(message queue) 2,写 ...

  10. 英语背单词app

    乐词 √ 真人发音 词根词缀 小组计划及时复习 真人例句 墨墨 单词量测试做的特别好 扇贝 哈哈哈,没用过 百词斩 同样25个单词,我在乐词中背了20分钟,在百词斩中需要60分钟. 原因在于 要记单词 ...