在C++中实现placement new的正确方法

Gus*_*avo 4 c++ memory-management new-operator

我已经像这样实现了新的展示位置:

inline void* operator new (std::size_t n, void* ptr) {return ptr;};
Run Code Online (Sandbox Code Playgroud)

我使用的环境没有标准库,所以我需要放置新的。使用此放置新运算符的语法应如下所示:

::new (pointer) int(); 
Run Code Online (Sandbox Code Playgroud)

我需要尺寸的原因是什么?我的 std::size_t 是无符号整数。我这样做的原因是因为没有可用的动态内存分配,我从池中获取所有指针。

Pet*_*ter 6

我打算这只是一个评论,但按照melpomene的建议,这是一个答案......

C++ 标准要求 a 的所有重载operator new()operator new []()接受 astd::size_t作为第一个参数(并且实现将确保通过该参数传递正在构造的任何内容的大小)。

放置 new 只是相应operator new()or的重载operator new []()。因此,它必须是那种形式。

原因大概是允许任何此类重载函数需要分配内存的可能性,在这种情况下,它需要访问大小信息。

没有什么可以阻止您的重载版本忽略 size 参数 - 这可能解释了为什么标准不会允许重载operator new()operator new[]()没有该参数。