意图:在指定内存地址上用指定类型的构造函数来构造一个对象。使用placement new必须手工调用析构函数,这也是显式调用析构函数的唯一情况。
代码示例:
#include <stdio.h>
#include <new>
class CTest
{
private:
int m_i2;
public:
CTest(int i)
{
m_i2 = i;
}
void Say()
{
printf("%d/n", m_i2);
}
};
int main()
{
char szBuf[10240] = "";
CTest *pTestObj = NULL;
pTestObj = new (szBuf) CTest(3); /* szBuf就是所谓的raw内存区了,它可以在堆上,也可以在栈上,跟在后面的是对象的构造函数。分配对象所需的内存,调用构造函数生成类对象,返回该对象的指针 */
if (pTestObj != NULL)
{
pTestObj->Say();
}
return 0;
}
// g++ t.cpp -o t -g -Wall -O