new操作符 操作符new
1.new是操作符,可对申请空间和释放空间的过程进行重载,调用构造函数和析构函数是自动调用的,delete同理。若在类内重载会优先调用类内的,操作系统对new操作符的重载是全局的。
2.操作符new,只能申请空间和释放空间,不会调用构造函数和析构函数。
void* operator new(size_t sz)
{
void *ptr = malloc(sz);
return ptr;
}
void operator delete(void *ptr)
{
free(ptr);
}
class Test
{
public:
Test(int data=0)
{
cout<<"Create Test."<<endl;
m_data = data;
m_value = (int *)malloc(sizeof(int));
*m_value = data;
}
~Test()
{
cout<<"Free Test."<<endl;
free(m_value);
}
public:
void* operator new(size_t sz)
{
void *ptr = malloc(sz);
return ptr;
}
void operator delete(void *ptr)
{
free(ptr);
}
private:
int m_data;
int *m_value;
};
void main()
{
//new 操作符
//Test *pt = new Test;
//delete pt;
Test *pt1 = new Test[10];
delete []pt1;
//操作符new,只malloc和free
Test *pt1 = (Test*)operator new(sizeof(Test));
}