簡體   English   中英

std :: map在[]上調用默認構造函數,在insert()上復制構造函數

[英]std::map calls default constructor on [], copy constructor on insert()

我的std :: map稱為統一塊。 當我發現有些奇怪的東西時,我正在測試添加新元素的方法。 當我添加新鍵時,請使用以下方法進行值對:

uniformBlocks["MatrixBlock"] = matrixBlock;

默認構造函數被調用。 但是,當我使用insert時,將調用復制構造函數,這是預期的。

uniformBlocks.insert(
    std::pair<const std::string, glWrapper::UBO>("MatrixBlock", matrixBlock)
);

為什么這兩種方法之間存在差異。 他們不是在后台執行相同的方法嗎?

如果對象不存在,則[]創建一個對象,然后返回對該對象的引用。 當時,沒有可用參數。

=然后分配給該參考。

insert不需要這樣做。 它可以使用傳入的對簡單地就位構建。

仔細使用, emplace甚至可以取消復制或移動ctor調用。

暫無
暫無

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

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