是什么使放置新调用对象的构造函数?

时间:2020-07-03 14:58:43

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

来自here

标准C ++库提供了以下内容的放置形式 在标准标头中声明的新运算符为:

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

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

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

除了返回第二个参数的值外,它什么也不做。它 完全忽略其第一个参数。异常规范 throw()表示不允许该函数传播任何 例外。

我知道new放置只是operator new的重载,它还会在给定的内存地址上调用构造函数。

但是什么叫构造函数?它只需要一个指针并再次返回它。取一个指针然后返回它有什么意义?为什么将值传递给函数以取回它?

1 个答案:

答案 0 :(得分:3)

但是什么叫它构造函数?

operator new中的semantics

有关详细信息,阅读有关n3337的C ++ 11标准new expressions 或该标准的更新版本。

定义operator new时,以后使用它会调用构造函数。根据C ++的定义。

我建议读一本好书C++ programming book

锻炼:使用malloc,位置operator new和一些{{3},在您的class MyClass中定义通常 new }。