文章来源C++ Primer 第五版
注:
#include <iostream> #include <new> const intchunk = 16; class Foo { public : int val( ) { return _val; } Foo( ) { _val = 0; } private : int_val; }; //预分配内存,但没有Foo对象 char*buf = new char[ sizeof(Foo) * chunk ]; int main( void ) { //在buf中创建一个Foo对象 Foo*pb = new (buf) Foo; //检查一个对象是否被放在buf中 if ( pb->val() == 0 ) { cout <<"new expressio worked!" <<endl; } //到这里不能再使用pb delete[] buf; return 0; }
new (place_address) type new (palce_address) type (initializer-list)
#include <iostream> #include <new> using namespace std; const int chunk = 16; class Foo { public: int val(){return _val;} Foo(){_val=0;} private: int _val; }; int main() { // 预分配内存buf char *buf = new char[sizeof(Foo) * chunk]; // 在buf中创建一个Foo对象 Foo *pb=new (buf) Foo; // 检查一个对象是否被放在buf中 if(pb->val()==0) cout<<"new expression worked!"<<endl; // 这里不存在与定位new表达式匹配的delete表达式,即:delete pb, 其实只是为了 // 释放内存的话,我们不需要这样的表达式,因为定位new表达式并不分配内存。 // 如果在析构函数中要做一些其他的操作呢?就要显示的调用析构函数。 // 当程序不再需要buf时,buf指向的内存被删除,它所包含的任何对象的生命期也就 // 都结束了。 delete[] buf; return 0; }
“new (start) Screen;”
Screen *ps = new (start) Screen;