从这里开始:
标准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
的重载,它还调用给定内存地址上的构造函数。
但是是什么让它调用构造函数呢? 它只是取一个指针,然后再次返回它。 拿一个指针然后返回它有什么意义? 为什么要将一个值传递给一个函数来收回它呢?
但是是什么让它调用构造函数呢?
有关详细信息,请阅读关于new
表达式的C++11标准n3337或该标准的更新变体。
当您定义一些运算符new
时,稍后使用它将调用构造函数。 根据C++的定义。
我推荐读一本好的C++编程书。
练习:使用malloc
,位置new
和throw
定义常见的运算符new
(在您的类MyClass
中)。