[英]Is it guaranteed that C++ standard library containers call the replaceable new functions?
如果我替換所有operator new
簽名,至少在我測試的實現上,我看到標准容器調用我的替換版本來分配內存。
這是否由標准保證? 也就是說,實現使用優化版本是不合法的,該版本沒有將我的替換函數稱為標准容器下的內存?
分配器感知容器(如std::vector<T>
)的默認分配器是std::allocator<T>
。 此類模板在標准的[default.allocator]部分中描述。 根據C ++ 14中的[allocator.members] / 6:
通過調用
::operator new(std::size_t)
獲得存儲
因此全局運營商new是您需要更換的運營商。 如果您專門為T
重載了operator new
,那么默認分配器將不會使用該重載。
這是否由標准保證?
只要您不使用自定義分配器來創建容器的實例,我相信這是真的。
來自http://en.cppreference.com/w/cpp/memory/allocator
如果未提供用戶指定的分配器,則
std::allocator
類模板是所有標准庫容器使用的默認分配器。
和
來自http://en.cppreference.com/w/cpp/memory/allocator/allocate :
通過調用
::operator new(std::size_t)
分配未初始化存儲的n * sizeof(T)
字節
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.