placement new :它不分配内存,只是返回指向已经分配好的某段内存的一个指针。因此不能删除它,但需要调用对象的析构函数。
注意点:一定要调用外在的析构函数
demo:
#ifndef EXERCISE_PLACE_NEW_H
#define EXERCISE_PLACE_NEW_H
#include <iostream>
using namespace std;
class X
{
X()
{
cout<<"constructor of X"<<endl;
}
~X()
{
cout<<"destructor of X"<<endl;
}
void SetNum(int n)
{
num = n;
}
int GetNum()
{
return num;
}
private:
int num;
};
int main()
{
char* buf = new char[sizeof(X)];
X *px = new(buf) X; // ******
px->SetNum(10);
cout<<px->GetNum()<<endl;
px->~X();
delete []buf;
return 0;
}
本文由 Ryan 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2019/01/25 14:14