Placement new见ME,p39.
有时有一些分配好的内存,你需要在上面构造对象。有一个特殊版本的operator new,称为placement new。
练习:
#include<iostream>
using namespace std;
class Base
{
public:
Base(){cout<<"base"<<endl;}
~Base(){cout<<"~base"<<endl;}
};
int main()
{
void* rawMemory = operator new(sizeof(Base));//只分配内存,不调用构造函数。而且operator new返回的是void*型
Base* pbn=new (rawMemory)Base();//placement New.在已经分配好的内存上构造对象。
cout<<rawMemory<<" "<<pbn<<endl;
delete pbn;
// pbn->~Base();
// operator delete(pbn);
getchar();
return 0;
}
delete pbn = pbn->~Base() + operator delete(pbn)。
如果rawMemory不是用operator new来分配的,后面就不能调用delete pbn。因为delete operator会调用operator delete()。而operator delete()只能释放operator new()分配的内存。
结果:
相关:
ME,p39.