364得票15回答
std::weak_ptr在什么情况下有用?

我开始学习C++11的智能指针,但我没有看到std::weak_ptr的任何有用的用途。有人可以告诉我什么时候使用std::weak_ptr是有用/必要的吗?

88得票5回答
shared_ptr 和 weak_ptr 有什么区别?

我正在阅读Scott Meyers的《Effective C++》一书。其中提到了tr1::shared_ptr和tr1::weak_ptr像内置指针一样工作,但它们会跟踪有多少个tr1::shared_ptrs指向一个对象。 这被称为引用计数。它在预防非循环数据结构中的资源泄漏方面效果很好...

84得票10回答
为什么不能从unique_ptr构造weak_ptr?

如果我理解正确,weak_ptr不会增加所管理对象的引用计数,因此它不表示所有权。它只是让您访问由其他人管理的对象,该对象的生存期由其他人控制。 因此,我不明白为什么可以从shared_ptr构造weak_ptr,但不能从unique_ptr构造。 有人能简要解释一下吗?

77得票2回答
weak_ptr是如何工作的?

我知道如何使用weak_ptr和shared_ptr。我知道shared_ptr是通过计算其对象中引用的数量来工作的。那么weak_ptr是如何工作的呢?我尝试阅读了boost源代码,但我对boost不够熟悉,无法理解它使用的所有内容。 谢谢。

47得票1回答
如何高效地检查两个std::weak_ptr指针是否指向同一个对象?

我想要比较两个std::weak_ptr或一个std::weak_ptr和一个std::shared_ptr是否相等。 我想要知道的是,这两个weak_ptr/shared_ptr所指向的对象是否相同。 比较结果应该是负的,不仅当地址不匹配时,还应该在底层对象被删除后,通过偶然的方式重新构造...

46得票4回答
提升(boost)、共享指针(shared ptr)和弱指针(weak ptr)?什么时候使用哪一个?

在我的当前项目中,我广泛使用了boost::shared_ptr。 最近,我的团队成员也开始使用weak_ptr。我不知道应该在什么情况下选择哪个。 除此之外,如果我想将weak_ptr转换为shared_ptr,我该怎么做?通过对weak_ptr进行锁定以创建shared_ptr会影响到...

42得票2回答
原生指针和弱指针有什么区别?

如题。这个问题可能已经有答案,但我未能找到。

33得票3回答
weak_ptr的性能惩罚是什么?

我正在设计一个游戏的对象结构,对于这种情况,最自然的组织形式是一棵树。作为智能指针的忠实粉丝,我专门使用 shared_ptr。但是,在这种情况下,树中的子节点需要访问其父节点(例如,地图上的生物需要能够访问地图数据,也就是它们父节点的数据)。 当然,拥有关系是地图拥有它的生物,因此持有它们...

33得票2回答
如何检查weak_ptr是否为空(未分配)?

有没有一种方法可以区分已分配(可能已过期)的 weak_ptr 和未分配的 one。weak_ptr<int> w1; weak_ptr<int> w2 = ...; 我明白以下代码是用于查找未被赋值或过期的情况,但是否有一种(更便宜的)方法只检查未被赋值的情况?if ...

32得票5回答
lock()和expired()有什么区别?weak_ptr C++

最近我开始学习C++11。 我研究了 weak_ptr。有两种方法可以获取原始指针。 lock() 函数 shared_ptr<Foo> spFoo = wpPtr.lock(); if(spFoo) { spFoo->DoSomething(); } exp...