在不使用“ get”的情况下访问std :: shared_ptr <std :: map <>>

问题描述

我认为这是一个标准问题,但仍然找不到解决方案。我可能会错过一些非常基本的东西。

要做的就是访问std::shared_ptr<std::map<int,int>>中的数据(只读)。 我能找到的唯一方法是将对象实际放在共享指针下面,并将其用作普通对象:

shared_ptr<map<int,int>> tmap = 
       make_shared<const map<int,int>>(initializer_list<std::map<int,int>::value_type>{{1,1}});
auto someMap = *(tmap.get());
cout << someMap[1];

尽管这可行,但我更愿意将其用作shared_ptr。

我能够找到与共享指针的“ []”运算符相关的SO question,但同样我不确定如何使用它。 为了完整起见,我还想知道如何修改这些数据。

TIA

编辑:从shared_ptr中删除了const。请注意,我的重点是访问映射的共享指针内部的数据,而不是其const部分。

解决方法

shared_ptr支持指针语义,因此您可以仅使用get*来代替使用->。通常在大多数生产代码中都避免使用get,因为它返回原始指针。顺便说一句,您可以/还应该像检查原始指针一样检查shared_ptr是否为空。

,

我认为我正在寻找的API是Compfunc,因为我可以直接在指针上使用此API(无论映射是否为const)

at()