使用new操作符在一个指定的内存块上构造一个对象。
[::] new [placement] new-type-name [new-initializer]
这里讨论的就是这个placement选项,它表示了一个内存的地址,也就是我们要构造的对象要放置于的一个内存块的开始地址,当然这个内存块应该放下我们要构造的对象。
使用如下:
class A
{
public:
A(int_a)
{m_a = _a;}
~A(){};
private:
int m_a;
};
char *pc = new char[sizeof(A)];//分配一块内存区域,其大小为sizeof(A);这样就够大了。
A*pA = new(pc)A(10);//这样就以pc所指向的一个内存区域上构造了A的对象,
//为了以后能继续使用pc这一个内存,我们删除pA时不能用delete而只能显示调 用A的析构函数;
pA->~A();
A*pB = new(pB)A(11);//再一次使用pc这一个内存区域.
delete pB;//此处用delete是因为我们不再使用pc这一块内存了,当然要释放掉.
//也可以用下面的方法释放掉
//pB->~A();
//delete [] pc;