簡體   English   中英

是否保證C ++標准庫容器調用可替換的新函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM