placement new是operator new的一个重载版本,只是我们很少用到它。如果你想在已经分配的内存中创建一个对象,使用new是不行的。也就是说placement new允许你在一个已经分配好的内存中(栈或堆中)构造一个新的对象。原型中void*p实际上就是指向一个已经分配好的内存缓冲区的的首地址。placement new技术的形式是 new(void *p) Type(...),表示在p所指的内存区域调用Type构造函数,该过程没有内存请求。
这个方法本质就是在对象地址处,调用2个参数的构造函数重新生成一个新的对象然后覆盖该对象。这个实现方法有投机取巧的嫌疑。
方法二:使用C++11新特性——委托构造函数(Delegating constructors)。可以在构造函数初始化列表直接调用,类似于调用基类构造函数。
Test::Test(int a, int b, int c) : Test(a, b)
{
...
}
上述说了构造函数有2个执行阶段,该方法是在第一个阶段进行的,更加方便。但是注意不能在Test(a, b)后面在接_c(c)了,因为调用2个参数的构造函数之后,就相当于该对象已经初始化完成了,不能在初始化列表放入其他成员的初始化形式。只能放在构造函数体中的赋值阶段。该方法目前只能用在VS2013中。
这个方法利用了C++11标准中的新特性——委托构造函数(Delegating constructors)。目前只能再VS2013及以上的版本使用,这个方法局限性很大,不过确实很方便。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。
注:相关教程知识阅读请移步到C++教程频道。










