标签:需要 c++ malloc 关键字 void ret 功能 ptr 析构
C++一个对象构造的完整过程为:分配内存和初始化,这也是new关键字所实现的功能,分配内存可通过重载new操作符来实现,系统初始化可通过调用构造函数来完成。我们不能改变new关键字的功能,但可以改变分配内存的方式。
new操作符的重载默认有一个分配内存大小的形参,但可根据实际需要来增加新的参数。
void* operator new(size_t size) { cout << "A::new()" << endl; return malloc(size); } void* operator new(size_t size,void *ptr) { cout << "A::new(ptr)" << endl; return ptr; } void* operator new(size_t size,void *ptr,size_t ss) { cout << "A::new(ptr,ss)" << endl; return ptr; }
这样系统初始化时,可以有以下方式:
A *pa = new A(); void *ptr = operator new (sizeof(A)); A *pb = new (ptr,sizeof(A))A(); //A *pb = new (ptr)A();
//所有的实参都放在new关键字后面
2. delete关键字的功能为:调用析构函数和释放占用内存,与new关键字相同,我们也可重载delete操作符。
delete操作符重载比较简单(当然也可携带参数),通常重载方式如下:
void operator delete(void *ptr) { cout << "A::delete()" << endl; free(ptr); }
调用方式如下:
pb->~A();//显式完成delete关键字功能 A::operator delete(ptr); delete pa;//直接调用
标签:需要 c++ malloc 关键字 void ret 功能 ptr 析构
原文地址:http://www.cnblogs.com/maniford/p/6195847.html