如何在无标准库的独立程序中实现非分配式placement new?
无标准库时正确实现非分配式placement new的方法
在不使用标准库的C++程序中,如何正确实现非分配式placement new?
C++标准草案明确指出,非分配式的相关形式属于保留函数,程序不得定义替代标准库版本的函数,且动态存储的相关规则不适用于这些保留的placement形式的operator new和operator delete:
这些函数是保留的;C程序不得定义替代C标准库中版本的函数。动态存储的规定不适用于这些保留的placement形式的operator new和operator delete。
根据研读,非分配式operator new与其他重载版本存在细微差异:标准允许编译器假设所有operator new重载版本分配的内存都严格对齐到最严格的基本对齐要求,不过对于对齐要求低于该标准的类型是否需要遵循此规则,目前存在一些争议。
是否有关于该如何实现非分配式placement new的明确说明?
目前已知两种可行方案:
- 由于未包含标准库,可显式声明符合标准库函数规范的版本:
void* operator new(size_t, void* p) noexcept { return p; } - 为每个需要使用该操作的类类型重载
operator new,但这种方式无法对基本类型执行非分配式new操作。
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

