C++基础:new的三种形式详解

来源:互联网 发布:复杂网络 混沌 编辑:程序博客网 时间:2024/06/07 22:21
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 operatordelete ps;                              //上面的两行等于下面的四行组合String *ps = (String *)operator new(sizeof(String)); //operator newnew(ps)String("Hello");       //placement newps->~String();operator delete();//new(p)类型(初始值)   //placement newint ar[10];new(ar)int(10);     //ar[0] = 10;new(ar,3)int(10);   //ar[3] = 10;return 0;}</span>


0 0
原创粉丝点击