天气图迭代器可以添加 shared_ptr 的计数?
Whether map’s iterator could add shared_ptr's counts?
例如:
#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;
我的问题:iter 可以添加 ptr1 的计数吗?在这种情况下,ptr1的内存地址会在ptr1 = ptr2之后释放吗?
不,不能。
当ptr1=ptr2
运行时,指向第一个映射的最后一个共享指针消失并且对象被销毁。
iter
现在无效,除了销毁或赋值之外,几乎任何使用都会导致未定义的行为。
创建一个使其容器持久化的迭代器是可能的,如果相当麻烦的话。作为一般规则,您应该学会保持对象生命周期简单并使用对象生命周期,而不是指望智能指针为您解决它。
例如:
#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;
我的问题:iter 可以添加 ptr1 的计数吗?在这种情况下,ptr1的内存地址会在ptr1 = ptr2之后释放吗?
不,不能。
当ptr1=ptr2
运行时,指向第一个映射的最后一个共享指针消失并且对象被销毁。
iter
现在无效,除了销毁或赋值之外,几乎任何使用都会导致未定义的行为。
创建一个使其容器持久化的迭代器是可能的,如果相当麻烦的话。作为一般规则,您应该学会保持对象生命周期简单并使用对象生命周期,而不是指望智能指针为您解决它。