码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的new与delete(二)

时间:2016-12-18 23:35:16      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:需要   c++   malloc   关键字   void   ret   功能   ptr   析构   

C++一个对象构造的完整过程为:分配内存和初始化,这也是new关键字所实现的功能,分配内存可通过重载new操作符来实现,系统初始化可通过调用构造函数来完成。我们不能改变new关键字的功能,但可以改变分配内存的方式。

  1. 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++中的new与delete(二)

标签:需要   c++   malloc   关键字   void   ret   功能   ptr   析构   

原文地址:http://www.cnblogs.com/maniford/p/6195847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!