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

时间:2017-09-17 10:25:29

标签: c++ memory-management new-operator

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

inline void* operator new (std::size_t n, void* ptr) {return ptr;};

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

::new (pointer) int(); 

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

1 个答案:

答案 0 :(得分:4)

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

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

新展示位置只是相应operator new()operator new []()的重载。因此,必须采用这种形式。

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

没有什么可以阻止你的重载版本忽略size参数 - 这可能解释了为什么标准不打算允许在没有该参数的情况下重载operator new()operator new[]()