簡體   English   中英

std :: vector默認構造函數是否可以拋出異常

[英]Can the std::vector default constructor throw an exception

如果我使用默認構造函數(和默認分配器)構造一個空的std::vector ,它會拋出異常嗎?

通常,為容器元素分配空間可能會拋出異常(這將是一個std::bad_alloc )。 但是std::vector的默認構造函數不需要分配任何這樣的空間; 它可以在第一次插入或賦值時懶惰地分配一些空間。 但是C ++標准是否要求它不會拋出異常(暗示延遲分配,或者捕獲std::bad_alloc然后再回到延遲分配)?

它取決於Allocator的默認構造函數。 std::vector的默認構造函數聲明為

 vector() noexcept(noexcept(Allocator())); (since C++17) 

如果使用std::allocator那么它是noexcept(true) ; 即不會拋出異常。

 allocator() noexcept; (since C++11) 

因此,在C ++ 17之前,或者如果使用非默認分配器,則可以拋出異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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