Bee*_*ope 22 c++ language-lawyer c++11
如果我替换所有operator new
我可以签名的签名,至少在我测试的实现上,我看到标准容器调用我的替换版本来分配内存.
这是否由标准保证?也就是说,实现使用优化版本是不合法的,该版本没有将我的替换函数称为标准容器下的内存?
Bri*_*ian 27
对于分配感知的容器,如默认分配器std::vector<T>
是std::allocator<T>
.此类模板在标准的[default.allocator]部分中描述.根据C++ 14中的[allocator.members]/6:
存储是通过调用获得的
::operator new(std::size_t)
因此全局运营商new是您需要更换的运营商.如果你operator new
特意T
重载,那么默认分配器将不会使用该重载.
这是否由标准保证?
只要您不使用自定义分配器来创建容器的实例,我相信这是真的.
来自http://en.cppreference.com/w/cpp/memory/allocator
在
std::allocator
类模板是如果没有提供用户指定的分配器由所有标准库容器使用的默认分配器.
和
来自http://en.cppreference.com/w/cpp/memory/allocator/allocate:
n * sizeof(T)
通过调用分配未初始化存储的字节::operator new(std::size_t)