簡體   English   中英

在地圖中插入對指針的引用

[英]Insert reference to pointer into an map

struct A
{
};

int main()
{
  A *a = new A;
  std::unordered_map<int, A*&> hash;

  hash.insert(make_pair(1, a)); //error
}

使它起作用的語法是什么?

如果我這樣做:

a = new A;

我希望hashmap指向新對象。

在您的示例中, std::make_pair的返回類型為std::pair<int, A*>而不是std::pair<int, A*&> (由於模板參數的推導)。

可以解決問題

hash.insert(std::make_pair<int, A*&>(1, a)); //no error

請注意,存儲對地圖和其他數據結構的引用並不常見。 考慮一下您是否真的需要它。

hash.insert( std :: pair <int,A *&> (1,a));

這個問題錯過了STL設計中固有的價值語義學觀點。

價值語義意味着

值存儲並復制到容器(包括指針)中,而不是引用中。

當您將某物插入容器時,即使您傳入的是參考變量,也會創建並存儲一個副本。

這意味着您不能具有類似引用的std :: vector <>的構造。

在您的特定示例中,省略參考符號(&),表示一切正常(除了內存泄漏)。 在stl中存儲指針很便宜,因此您不必擔心復制指針的成本。

但是,就像在C ++中一樣,您必須關心清理(如果不使用智能指針)和對象生存期。

暫無
暫無

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

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