delete []实现机制

当我们用new生成一个新的对象时,发生了两件事情。

  • 为对象分配内存
  • 调用类的构造函数初始化对象

new的时候指定了T的大小为NUM,但是delete的时候没有指定大小。编译器是怎么做的呢?

根据Inside The C++ Object Model上所言,现在的编译器大多使用两种方法, 一种是cookie, 一个记录分配空间大小的内存小块绑定在分配内存的地址头部。二是使用表来对分配了的指针进行管理,每一个分配了空间的指针都在表中对应着分配空间的大小。

class  T
{
public:
T(){cout<<"constrctor"<<endl;}
~T(){cout<<"Deconstructor"<<endl;}
 };
 void main()
 {
 const int NUM=3;
     T *p2=new T[NUM];
 cout<<hex<<p2<<endl;
 delete[] p2;
 }

Reference

[1].http://www.cnblogs.com/hdtianfu/archive/2011/12/21/2296186.html

[2].http://blog.csdn.net/shandaliuyan/article/details/5930719

时间: 2024-12-26 09:44:41

delete []实现机制的相关文章

javascript delete机制学习

想了解delete的机制缘起一个现象,我无法解释,也无法理解. 首先看一下下面这个例子: ? 1 2 var x = 1; delete x; //false 然后我又执行了一次: ? 1 2 y = 2; delete y; //true 看到上面的结果,我比较吃惊,为什么同样是删除,区别怎么这么大呢?进而我想学习和了解一下JS delete的机制. 在MDN(Mozilla Developer Network)上看到下面一个例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13

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

http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? - 如果你对这些问题都有疑问的话,不

【转】浅谈 C++ 中的 new/delete 和 new[]/delete[]

原文 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? - 如果你对这些问题都有疑问的话,不妨看看我这篇文章. new 和 delete 到底是什么? 如果找工作的同学看一些面试的书,我相

C++ new(1)

如果找工作的同学看一些面试的书,我相信都会遇到这样的题:sizeof 不是函数,然后举出一堆的理由来证明 sizeof 不是函数.在这里,和 sizeof 类似,new 和 delete 也不是函数,它们都是 C++ 定义的关键字,通过特定的语法可以组成表达式.和 sizeof 不同的是,sizeof 在编译时候就可以确定其返回值,new 和 delete 背后的机制则比较复杂.继续往下之前,请你想想你认为 new 应该要做些什么?也许你第一反应是,new 不就和 C 语言中的 malloc 函

c++ 浅谈 new 的使用

实例用法: 创建对象: class U_Ptr smart; U_Ptr* ptr = new U_Ptr(); class U_Ptr smart(new U_Ptr(p)); int *p = new int; //此时指针p指向一个int对象,该对象没有被初始化  int *p = new int(0); //指针p指向一个int对象,该对象被初始化为0 int *p = new int[10]; //指针p指向一个int型数组,该数组未被初始化 int *p = new int[10](

c++ 面试题 面试题复盘

目录 1. #include<filename.h>与#include"filename.h"的区别 3.malloc/free 与 new delete 1. #include<filename.h>与#include"filename.h"的区别 对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h, 对于#include "filename.h" ,编译器从用户

FreakZ学习笔记:路由发现机制

路由发现机制 路由发现机制只有在发送通信包的过程中会被调用,而接收过程因为发送时候已经进行了通信链路的扫描和连接,所以不会再进行路由发现机制. 路由的所有处理机制都是在NWK层进行的,当然,路由发现机制也一样.当协议栈进行数据发送时,会依次按照APP->APS->NWK->MAC->PHY->Radio的层次关系来进行,APS层执行完成之后,会跳转到NWK层的nwk_data_req函数,该函数为NWK数据请求服务,接收APS层的数据并且加上NWK层的包头,然后将数据打包.n

Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)

1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束没有被破坏 持久性:事务的提交结果,将持久保存在数据库中 2.事务并发会产生什么问题 1)第一类丢失更新:在没有事务隔离的情况下,两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 导致对数据的两个修改都失效了. 例如: 张三的工资为5000,事务A中获取工资为5000,事务B获取工资为5

关于js中的回收机制,通俗版

在前面的几篇文章中,我讲解过了js中的回收机制,但是对于当时的我来说,我自己对回收机制的这个概念也有些懵懵懂懂,现在对回收机制有了更深入的理解,所以特此发布此文给于总结,也好加深记忆. 如果你想学习闭包那么js中的回收机制是必不可少的,当然学习闭包除了需要理解js中的回收机制以外还需要了解其他的概念,我的其他文章有相关的说明,这里不做闭包的讲解. 为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个