new和::new

#include<iostream>
#include<cstdlib>
#include<new>
using namespace std;
class T{  
public:  
	T(){  
		cout << "构造函数。" << endl;  
	}  

	~T(){  
		cout << "析构函数。" << endl;  
	}  

	void * operator new(size_t sz){  

		T * t = (T*)malloc(sizeof(T));  //operator new就是简单的分配内存即可
		cout << "内存分配。" << endl;  

		return t;  
	}  

	void operator delete(void *p){  

		free(p);  
		cout << "内存释放。" << endl;  

		return;  
	}
	void operator + ( T &c2){
		cout << "operator +" << endl;
	} 
};  

int main()  
{  
	T * t = ::new T(); // 先 内存分配 ,再 构造函数(new 用的是自己的operator new ,::new用的是外层的operator new) 

	delete t; // 先 析构函数, 再 内存释放(用的是自己重载的operator delete)

	void *p = T::operator new(5);//直接调用构造函数。
	
	T t1;
	T::operator +(t1);//cannot call member function ‘void T::operator+(T&)’ without object

	return 0;  
}  

参考文章如下:在C++中,你真的会用new吗? - 华为云开发者联盟的个人空间 - OSCHINA - 中文开源技术交流社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值