gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:08 24 4
gpt4 key购买 nike

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

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

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

::new (pointer) int(); 

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

最佳答案

我原本打算这只是一个评论,但根据 melpomene 的建议,这是一个答案....

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

placement new 只是相应operator new()operator new []() 的重载。因此,它必须采用这种形式。

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

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

关于c++ - 在 C++ 中实现 placement new 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com