【发布时间】:2016-03-06 23:05:10
【问题描述】:
似乎weak_ptr 不知何故只知道它引用的@987654322@ 何时被销毁。那个怎么样?是否有一个恒定的链接保持或什么?
weak_ptr<int> test() {
shared_ptr<int> foo{new int};
return foo;
}
int main() {
auto foo = test();
cout << foo.expired() << endl;
}
当weak_ptr<int> 去检查shared_ptr<int> 的状态时,我预计会出现段错误,但没有。 weak_ptr<int> 正确地将内存标识为已释放。它是怎么知道的?
【问题讨论】:
-
'std::weak_ptr' 以与 'std::shared_ptr' 相同的方式保存对共享引用计数的引用。唯一的区别是 'std::weak_ptr' 不会增加/减少这个计数。
-
我本以为会出现段错误... 为什么?这就是weak_ptr的重点
-
@UmNyobe 好点!我想我是想表达我不明白它是如何工作的。
标签: c++ shared-ptr weak-ptr