C++11 map的迭代器是否可以添加共享的ptr计数?

C++11 map的迭代器是否可以添加共享的ptr计数?,c++11,shared-ptr,C++11,Shared Ptr,例如: #include <memory> shared_ptr<map<int, int>> ptr1 = make_shared<map<int, int>>(); map<int, int>::const_iterator iter = ptr1->begin(); shared_ptr<map<int, int>> ptr2 = make_shared<map<int, i

例如:

#include <memory>

shared_ptr<map<int, int>> ptr1 = make_shared<map<int, int>>();
map<int, int>::const_iterator iter = ptr1->begin();
shared_ptr<map<int, int>> ptr2 = make_shared<map<int, int>>();
ptr1 = ptr2;
我的问题是:国际热核聚变实验堆能增加ptr1的数量吗?在这种情况下,ptr1=ptr2后ptr1的内存地址是否会释放?

否,它不能

当ptr1=ptr2运行时,指向第一个映射的最后一个共享指针消失,对象被销毁

国际核聚变实验堆(iter)现在是无效的,除销毁或分配外,几乎任何使用都会导致未定义的行为


创建一个迭代器,使其容器持久化是可能的,尽管这相当麻烦。作为一般规则,您应该学习保持对象生存期的简单并使用对象生存期,而不是期望智能指针为您解决问题。

不,它不能。在您的示例中,ptr1和ptr2最终都指向第二个映射。第一张地图将被销毁;伊贡·斯宾格勒:不要越过地图。彼得·文克曼:为什么?埃贡·斯宾格勒:那会很糟糕。