#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++中的new与delete简单浅析
猜你喜欢
转载自blog.csdn.net/cyousui/article/details/17071935
今日推荐
周排行