放置新的和非默认的构造函数

时间:2010-10-11 22:26:20

标签: c++ new-operator placement-new

我可以在带有参数的构造函数上调用C ++ placement new吗?我正在实现一个自定义分配器,并希望避免将功能从非默认构造函数移动到init函数。

class CFoo
{
public:
    int foo;
    CFoo()
    {
        foo = 0;
    }

    CFoo(int myFoo)
    {
        foo = myFoo;
    }
};

CFoo* foo = new (pChunkOfMemory) CFoo(42);

我希望使用第二个构造函数在pChunkOfMemory构造CFoo类型的对象。当使用operator new时,我只使用默认构造函数?

解决!我没有#include <new>。在此之后,调用placement :: new可以正常使用非默认构造函数。

1 个答案:

答案 0 :(得分:19)

要使用展示位置新功能,您需要添加标题<new>

#include <new>

否则,operator new的展示位置形式未定义。