C++中的new与delete简单浅析

原创 2013年12月02日 14:27:46
#include <iostream>
#include <cstdlib>

using namespace std;

/*
	类名:Demo
*/
class Demo
{
public:
	// Demo类的构造函数
	Demo(){ cout <<  "Demo()" << endl; }
	// Demo类的析构函数
	~Demo(){ cout << "~Demo()" << endl; }
	// 重载new运算符
	static void* operator new(size_t bytes)
	{ 
		cout << "new Demo" << "\tbytes = " << bytes << endl; 
		if( 0 == bytes ) 
			return NULL;
		void *p = malloc(bytes);
		return p;
	}
	// 重载delete运算符
	static void operator delete(void* addr)
	{ 
		cout << "delete Demo" << endl; 
		if( NULL == addr )
			return;
		free(addr);
	}
	// 重载new[]运算符
	static void* operator new[](size_t bytes)
	{ 
		cout << "new[] Demo" << "\tbytes = " << bytes << endl; 
		if( 0 == bytes ) 
			return NULL;
		void *p = malloc(bytes);
		return p;
	}
	// 重载delete[]运算符
	static void operator delete[](void* addr)
	{ 
		cout << "delete[] Demo" << endl; 
		if( NULL == addr )
			return;
		free(addr);
	}	
}; 
 
// 入口函数
int main()
{
	cout << "===============================================" << endl;
	Demo* p1 = new Demo;	// 1.分配空间;		2.执行构造函数;
	delete p1;				// 1.执行析构函数;	2.释放空间;
	cout << "===============================================" << endl;
	Demo* p2 = new Demo[5];	// 这里会额外分配4个字节来保存分配空间个数
	delete[] p2;
	cout << "===============================================" << endl;
}
/*
	执行结果:
		===============================================
		new Demo	bytes = 1
		Demo()
		~Demo()
		delete Demo
		===============================================
		new[] Demo	bytes = 7 	// 这里会分配额外4个字节来保存分配空间的个数
		Demo()					// 以便通知delete来释放多少个分配空间
		Demo()
		Demo()
		~Demo()
		~Demo()
		~Demo()
		delete[] Demo
		===============================================
*/
分析:从上面程序执行结果可以看出,在C++中分配内存的最小单位为1个字节因为计算机内存分配最小单位为1个字节。当分配一组内存的时候,C++会为分配内存额外开上一个4个字节大小的空间,这多出来的4个字节的空间是为了通知delete应该释放多少个空间。再补充一点:在C++中重载new和delete运算符无论加不加static修饰,C++都会认为是static。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 中 malloc/free 与 new/delete 浅析

new/delete 通常来说是操作符,就是"+","-"一样,malloc/free 是 C++/C 语言的标准库函数 —— 本质区别。本文主要从以下5各方面比较、分析 malloc/free,ne...

C++ 关于new和delete的一些简单用法

主函数代码 #include // std::cout #include // ::operator new #include"newdemo.h" using std:...

C++_new_和_delete的整理资料

  • 2012年11月18日 12:49
  • 53KB
  • 下载

c++基础介绍,如delete ,new

  • 2010年01月17日 14:15
  • 907KB
  • 下载

C++内存探讨 New与delete

在windows中,C++中的new与delete操作分析~
  • waykd
  • waykd
  • 2017年10月24日 16:51
  • 38

c++语言,new和delete

  • 2011年11月11日 19:55
  • 839KB
  • 下载

C++开发DLL中使用new和delete注意事项

报错情况: 1,在 DLL 中用 new 来创建宿主程序中的对象,然后把这个对象指针保存到宿主程序,当 DLL 被卸载后,凡是涉及到这个指针的调用都会报错,包括 delete 这个指针也会有错。 ...
  • dodott
  • dodott
  • 2016年11月11日 18:26
  • 943

C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free .

内存分配方式 内存分配方式有三种: [1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。 [2] 在栈上创...

内存泄漏查找c++ new delete

#include #include struct MemIns { void *pMem; int m_nSize; char m_szFileName[256]; ...
  • occupy8
  • occupy8
  • 2016年04月05日 18:52
  • 569

Effective c++ 条款16学习笔记: 成对使用new和delete时要采取相同形式

User the same from in corresponding uses of new and deletes 条款16:User the same from in correspond...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的new与delete简单浅析
举报原因:
原因补充:

(最多只允许输入30个字)