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 是无符号整数。我这样做的原因是因为没有可用的动态内存分配,我从池中获取所有指针。
我打算这只是一个评论,但按照melpomene的建议,这是一个答案......
C++ 标准要求 a 的所有重载operator new()或operator new []()接受 astd::size_t作为第一个参数(并且实现将确保通过该参数传递正在构造的任何内容的大小)。
放置 new 只是相应operator new()or的重载operator new []()。因此,它必须是那种形式。
原因大概是允许任何此类重载函数需要分配内存的可能性,在这种情况下,它需要访问大小信息。
没有什么可以阻止您的重载版本忽略 size 参数 - 这可能解释了为什么标准不会允许重载operator new()或operator new[]()没有该参数。