【发布时间】:2018-03-15 04:22:43
【问题描述】:
考虑以下代码:
#include <iostream>
#include <list>
#include <memory>
class Foo;
class Foo {
public:
Foo(int i): id(i) {}
typename std::list<std::shared_ptr<Foo>>::iterator i2;
int id;
};
int main() {
std::list<std::shared_ptr<Foo>> l;
auto f1 = std::make_shared<Foo>(1);
f1->i2 = l.end();
l.insert(f1->i2, f1);
std::cout << f1->id << std::endl;
std::cout << l.size() << std::endl;
for (auto i: l) {
std::cout << i->id << std::endl;
}
auto t = f1->i2;
l.erase(t);
std::cout << l.size() << std::endl;
}
执行这些代码会在l.erase(t)得到一个SIGSEGV,好像ListNode在shared_ptr减少它的ref_count之前就被销毁了。为什么?如何解决?
【问题讨论】:
标签: c++ list stl shared-ptr