new 是c++的一个操作符,作用是:
1)调用operator new分配一块堆内存;
2)调用构造函数。
new 操作符可以附带额外的参数 new(arg1,arg2),将调用对应的operator new(size_t n,arg1,arg2)分配内存(或者自定义
行为,如placement new);
placement new是一个自定义的例子:new(void* pData) Class. 调用operator new(size_t n,void* pData)(什么也不做),再调用构造函数。
其中有部分operator new 已经定义过了,比如operator new(size_t n),operator new(size_t n,void* pData),也可以
自定义这些函数,两种方式
1)全局函数,但是在参数上与已经定义的要有区别,否则链接错误.
如:operator new(size_t n,char* szFilename,char* szLinenum,char* szTime);
2)成员函数,以类的成员函数实现。
class Example
{
public:
void * operator new(size_t n);
void * operator new(size_t,void* pData);
...
}
delete 与new同理,只不过不是调用构造函数,而是调用析构函数,且在operator delete之前。
1)调用operator new分配一块堆内存;
2)调用构造函数。
new 操作符可以附带额外的参数 new(arg1,arg2),将调用对应的operator new(size_t n,arg1,arg2)分配内存(或者自定义
行为,如placement new);
placement new是一个自定义的例子:new(void* pData) Class. 调用operator new(size_t n,void* pData)(什么也不做),再调用构造函数。
其中有部分operator new 已经定义过了,比如operator new(size_t n),operator new(size_t n,void* pData),也可以
自定义这些函数,两种方式
1)全局函数,但是在参数上与已经定义的要有区别,否则链接错误.
如:operator new(size_t n,char* szFilename,char* szLinenum,char* szTime);
2)成员函数,以类的成员函数实现。
class Example
{
public:
void * operator new(size_t n);
void * operator new(size_t,void* pData);
...
}
delete 与new同理,只不过不是调用构造函数,而是调用析构函数,且在operator delete之前。