我已经像这样实现了新的展示位置:
inline void* operator new (std::size_t n, void* ptr) {return ptr;};
我使用的环境没有标准库,所以我需要新的放置。使用此placement new运算符的语法应如下所示:
::new (pointer) int();
我需要什么尺寸?我的std :: size_t是unsigned int。我这样做的原因是因为没有可用的动态内存分配,我从池中获取所有指针。
答案 0 :(得分:4)
我打算这只是一个评论,但是遵循melpomene的建议,这是一个答案....
C ++标准要求operator new()
或operator new []()
的所有重载都接受std::size_t
作为第一个参数(并且实现将确保正在构造的任何内容的大小通过那个论点)。
新展示位置只是相应operator new()
或operator new []()
的重载。因此,必须采用这种形式。
据推测,推理是允许任何此类重载函数需要分配内存的可能性,在这种情况下,它需要访问大小信息。
没有什么可以阻止你的重载版本忽略size参数 - 这可能解释了为什么标准不打算允许在没有该参数的情况下重载operator new()
或operator new[]()
。