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