[英]Howto detect a fail of dynamic memory allocation when pushing to std::deque?
我正在尋找一種技術來檢測是否可以推送/插入/等。 std :: deque的其他元素。 它應該為我執行動態內存分配,但是當我的內存已滿時會發生什么? 通過使用malloc(),我將收到一個Nullpointer,但是當使用std :: deque時如何檢測內存不足的情況?
標准容器的分配由其分配器處理,該分配器默認為std::allocator
。
std::allocator
allocate
函數正在使用operator new
進行分配。
如果operator new
失敗,它將拋出std::bad_alloc
異常。
使用文檔 。
例如,對於std::deque::push_back
我們讀取:
如果拋出異常(可能是由於Allocator :: allocate()或元素復制/移動構造函數/賦值),則此函數無效(強烈保證異常)。
假設您的類型不會在復制/移動操作上拋出,則唯一可能拋出的地方是分配器。
std::allocator::allocate()
將在失敗時拋出std::bad_alloc
:
如果分配失敗,則拋出std :: bad_alloc。
處理標准容器內的內存不足情況將委托給基礎分配器(第二個,通常未指定的std::deque
模板參數)。 如果使用默認的std::allocator
,它會在std::allocator::allocate
引發失敗,則可以將插入內容包裝到try-catch塊中:
try {
myDeque.push_back(42);
} catch (const std::bad_alloc& e) {
// Do something...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.