提问者:小点点

是什么让placement new调用了对象的构造函数?


从这里开始:

标准C++库提供了在标准头中声明的运算符new的放置形式:

void *operator new(std::size_t, void *p) throw ();

大多数C++实现将其定义为内联函数:

inline
void *operator new(std::size_t, void *p) throw () 
{
    return p;
}

它只返回第二个参数的值。 它完全忽略它的第一个参数。 exception-specification throw()表示不允许该函数传播任何异常。

我知道placement new只是对运算符new的重载,它还调用给定内存地址上的构造函数。

但是是什么让它调用构造函数呢? 它只是取一个指针,然后再次返回它。 拿一个指针然后返回它有什么意义? 为什么要将一个值传递给一个函数来收回它呢?


共1个答案

匿名用户

但是是什么让它调用构造函数呢?

有关详细信息,请阅读关于new表达式的C++11标准n3337或该标准的更新变体。

当您定义一些运算符new时,稍后使用它将调用构造函数。 根据C++的定义。

我推荐读一本好的C++编程书。

练习:使用malloc,位置newthrow定义常见的运算符new(在您的类MyClass中)。