new的三种形式详解:
1.new operator : new操作符 《=====》 ( operator new 开辟空间 ) + (调动构造函数 )
2.operator new : 操作符new 只开辟空间
1.new operator : new操作符 《=====》 ( operator new 开辟空间 ) + (调动构造函数 )
2.operator new : 操作符new 只开辟空间
3.placement new : 定位new
例子:
<span style="font-size:18px;">#include <iostream>
using namaespace std;
void* operator new(size_t sz) //operator new 只开辟空间
{
void *p = malloc(sz);
return p;
}
void operator delete(void *p) //operator delete 只释放空间
{
free(p);
}
void operator new[](size_t sz)
{
void *p = malloc(sz);
return p;
}
void operator delete[](void *p)
{
free(p);
}
class String
{
public:
String(const char *str = "")
{
if(str == NULL)
{
data = new char[1];
data[0] = '\0';
}
else
{
data = new char[strlen(str)+1];
strcpy(data,str);
}
}
~String()
{
delete []data;
data = NULL;
}
private:
char *data;
};
void* operator new(size_t sz, int *d, int pos)
{
return &d[pos];
}
int main()
{
String *ps = new String("Hello"); //new operator
delete ps;
//上面的两行等于下面的四行组合
String *ps = (String *)operator new(sizeof(String)); //operator new
new(ps)String("Hello"); //placement new
ps->~String();
operator delete();
//new(p)类型(初始值) //placement new
int ar[10];
new(ar)int(10); //ar[0] = 10;
new(ar,3)int(10); //ar[3] = 10;
return 0;
}</span>