簡體   English   中英

推送到std :: deque時如何檢測動態內存分配失敗?

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

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