微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在不使用“ 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。