weak-ptr相关内容
似乎有两种方法可以临时获取weak_ptr指向的资源的所有权: 使用lock() 将weak_ptr传递给shared_ptr构造函数 这两个函数都产生shared_ptr,在weak_ptr为空的情况下,锁返回nullptr,shared_ptr构造函数抛出异常。 因此,问题是:应该在什么时候使用其中之一?是否有与此相关的一般指导原则或最佳实践? 推荐答案 复制自ht
..
有时,我们对捕获对象状态的lambda的生存期一无所知(例如,从Object返回它,将其注册为回调而不能取消订阅等)。如何确保lambda不会在调用时访问已销毁的对象? #include #include #include class Foo { public: Foo(const std::string& i_name)
..
(编辑)环境: plee@sos-build:/usr/local/include/boost$ lsb_release -a没有可用的 LSB 模块.经销商编号:Ubuntu说明:Ubuntu 11.10发布:11.10代号:oneiricplee@sos-build:/usr/local/include/boost$ uname -aLinux sos-build 3.0.0-12-gene
..
我了解如何使用 weak_ptr 和 shared_ptr.我通过计算其对象中的引用数量来了解 shared_ptr 是如何工作的.weak_ptr 如何工作?我尝试通读 boost 源代码,但我对 boost 不够熟悉,无法理解它使用的所有内容. 谢谢. 解决方案 shared_ptr 使用额外的“计数器"对象(又名“共享计数"或“控制块")来存储引用计数.(顺便说一句:那个“计数
..
我目前正在设计一个 API,我不确定我的函数应该采用 shared_ptr 还是 weak_ptr.有包含查看器的小部件.查看器有一个函数 add_painter 可以向查看器添加一个画家.当查看器需要重绘时,它使用它的画家来绘制到缓冲区中并显示结果.我得出的结论是,观众应该使用 weak_ptr 来抓住画家: 一个画家可能会在多个查看者中使用,因此查看者不能拥有该画家. 删除画家应将其从
..
我想使用类似指针的对象 所有权m_foo 用于拥有对象和句柄 Referencem_someFoo 作为另一个上下文中的经典“指针",而我的 Reference 应该知道何时不再存在原始对象(例如,通过返回nullptr),并且还应该有可能防止原始对象删除(锁定)一小段时间. 我知道 shared_ptr (所有权)和 weak_ptr (参考)
..
是否可以确保将shared_ptr重置为包含该地址的同一地址时,weak_ptr会过期? #include #include int main() { int* i = new int(0); std::shared_ptr si( i ); std::weak_ptr wi = si; si.re
..
我正在开发带有一些类的库,我们称它们为C1, C2 and ... Cn.这些类中的每一个都实现一些接口,即I1, I2, ... Im.(n> m).库中对象之间的关系很复杂,我必须 提供一些API,供我的图书馆用户使用智能指针访问这些对象. 经过一些讨论,我发现将共享指针返回给库用户不是一个好主意,因为在那种情况下,我不能确保可以在我的库的内存中精确地删除该对象.返回弱指针有相同的问题,
..
也许以前有人问过这个问题,但我从未找到满意的答案.另外,为简单起见,假设我在谈论单线程应用程序. 所以,我听到过很多次,如果您有一个不拥有并且其使用寿命可以保证的对象,则应该引用它带有原始指针.对象的所有者将使用unique_ptr,并根据需要分发原始指针. 但是,如果对象是非所有者,并且生存期不能保证 ,该怎么办?然后可以使用weak_ptr,是的.但是,随后任何人都可能会收到一个w
..
我读到 与shared_ptr? 我知道我需要使用 weak_ptr 来避免循环引用. 所以我创建了一个小程序来播放循环参考. 以下对象(间谍)将被调用 class spyder { public: spyder(std::string _name): m_name(_name), finger(nullptr) { } inline con
..
我了解了共享指针,并了解了如何使用.但是我从来没有理解共享指针的循环依赖问题以及弱指针如何解决这些问题.有人可以清楚地解释这个问题吗? 解决方案 问题并不复杂.让-->表示共享指针: The rest of the program --> object A --> object B ^ |
..
有没有办法区分已分配(可能已过期)的weak_ptr和未分配的weak_ptr. weak_ptr w1; weak_ptr w2 = ...; 我了解以下针对未分配或到期的检查,但是是否有(更便宜的)检查仅针对未分配? if (!w.lock()) { /* either not assigned or expired */ } 解决方案 您可以使用两次
..
考虑以下代码: #include #include using namespace std; class T; std::weak_ptr wptr; class T { public: T() { } ~T() { std::cout
..
如果我理解正确,那么weak_ptr不会增加托管对象的引用计数,因此它不表示所有权.它只是让您访问一个对象的生命周期,该对象的生命周期由其他人管理. 所以我真的不明白为什么不能从unique_ptr构造weak_ptr,而只能从shared_ptr构造. 有人可以简要解释一下吗? 解决方案 std::weak_ptr不能使用,除非您通过lock()方式将其转换为std::shared
..
我想将构造的shared_ptr分配给weak_ptr: std::weak_ptr rw = std::shared_ptr(operator new(60), [](void *pi) { operator delete(pi); }); 但是,当我执行rw.expired()时,它显示已过期,表示它为空.有什么建议可以解决我的问题吗? 谢谢.
..
我有这样的一套:set, owner_less > > setName; 工作正常.但我想将其更改为无序集合.但是,这样做时会出现大约六页的错误.任何想法如何做到这一点? 浏览完所有错误消息页面后,我发现可能会有所帮助的行. /usr/include/c++/4.7/bits/functional_hash.h:60:7
..
#include #include struct A : public std::enable_shared_from_this { ~A() { auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here. std:
..
考虑以下代码: #include #include using namespace std; struct MySharedStruct { int i; }; void print_value_of_i(weak_ptr weakPtr) { if (shared_ptr
..
shared_ptr的控制块在存在至少一个weak_ptr时保持活动状态.如果共享指针是用make_shared创建的,则意味着该对象的整个内存将保持分配状态. (对象本身已被适当地破坏,但是由于对象的控制块和内存是像make_shared一样分配在一个块中的,因此只能将它们一起释放.) 我的理解正确吗? 例如,著名的缓存示例" .对象的内存将永远保持分配状态. 在任何实际情况下
..
我正在尝试使用boost::shared_ptr的循环引用,并设计了以下示例: class A{ // Trivial class public: i32 i; A(){} A(i32 a):i(a){} ~A(){ cout changeI(shared_p
..