接触到了一个新的知识点:定位new。
其主要用来 在已经分配了的内存上再来构建类对象。
例子:
//Placement New Expression
#include <new>
#include <iostream>
using namespace std;
class X
{
public:
X()
{
a = 'b';
}
~X()
{
a = 'c';
}
private:
char a;
};
int main()
{
char* buf = new char[10];
for(int i=0;i < 10;++i)
buf[i] = 'a';
cout<<buf<<endl;
X *p = new (buf) X;
if(p)
{
cout<<"new expression work now\n"<<endl;
}
cout<<buf<<endl;
delete[] buf;
return 0;
}
执行输出:
aaaaaaaaaa
new expression work now
baaaaaaaaa
这里可以看出首个字符被对象X所占用。
这里是先使用了 new []分配了10字节的内存buf,所以最后释放内存的时候用delete []buf释放。因为分配内存的并不是我们的定位new,所以不是使用delete p释放。