我已经按照以下方式实现了放置新内容:
我已经这样实现了放置新内容:
inline void* operator new (std::size_t n, void* ptr) {return ptr;};
我使用的环境没有标准库,所以我需要使用放置 new(placement new)。使用此放置 new 操作符的语法应如下所示:
::new (pointer) int();
我为什么需要size呢?我的std::size_t是无符号整数。我这样做的原因是因为没有动态内存分配,我从一个池中获取所有指针。
operator new()
或operator new[]()
的所有重载都接受一个std::size_t
作为第一个参数(并将传递正在构造的任何内容的大小)。放置new只是相应的operator new()
或operator new[]()
的重载。推理是,可能需要分配内存的任何此类函数都需要知道大小。没有什么可以阻止您重载的版本忽略大小参数。 - Peterinline void* operator new(std::size_t n, void* ptr) {return ptr;};
是我实现的新操作符。编译器给了我一个错误:error: ‘operator new’ takes type ‘size_t’ (‘unsigned int’) as first parameter [-fpermissive]。 - Gustavo<new>
(很奇怪,因为它是符合标准的独立环境的最低要求),但你有<cstddef>
并且可以使用std::size_t
? - StoryTeller - Unslander Monicanew(ptr, my_type{}) int()
。如果你不这样做,并且将你的代码链接到其他可能会产生意外结果的代码中。 - Oliv