weak-ptr相关内容

Std::Ware_PTR:LOCK或SHARED_PTR构造函数?

似乎有两种方法可以临时获取weak_ptr指向的资源的所有权: 使用lock() 将weak_ptr传递给shared_ptr构造函数 这两个函数都产生shared_ptr,在weak_ptr为空的情况下,锁返回nullptr,shared_ptr构造函数抛出异常。 因此,问题是:应该在什么时候使用其中之一?是否有与此相关的一般指导原则或最佳实践? 推荐答案 复制自ht ..
发布时间:2022-08-26 13:21:02 C/C++开发

weak_ptr 是如何工作的?

我了解如何使用 weak_ptr 和 shared_ptr.我通过计算其对象中的引用数量来了解 shared_ptr 是如何工作的.weak_ptr 如何工作?我尝试通读 boost 源代码,但我对 boost 不够熟悉,无法理解它使用的所有内容. 谢谢. 解决方案 shared_ptr 使用额外的“计数器"对象(又名“共享计数"或“控制块")来存储引用计数.(顺便说一句:那个“计数 ..
发布时间:2021-12-24 15:06:34 C/C++开发

我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个 API,我不确定我的函数应该采用 shared_ptr 还是 weak_ptr.有包含查看器的小部件.查看器有一个函数 add_painter 可以向查看器添加一个画家.当查看器需要重绘时,它使用它的画家来绘制到缓冲区中并显示结果.我得出的结论是,观众应该使用 weak_ptr 来抓住画家: 一个画家可能会在多个查看者中使用,因此查看者不能拥有该画家. 删除画家应将其从 ..
发布时间:2021-07-23 20:32:05 C/C++开发

通过“所有权"的不同类型更好的shared_ptr.和“参考"?

我想使用类似指针的对象 所有权m_foo 用于拥有对象和句柄 Referencem_someFoo 作为另一个上下文中的经典“指针",而我的 Reference 应该知道何时不再存在原始对象(例如,通过返回nullptr),并且还应该有可能防止原始对象删除(锁定)一小段时间. 我知道 shared_ptr (所有权)和 weak_ptr (参考) ..
发布时间:2021-04-19 20:30:01 C/C++开发

如何减少很多包装类的实现代码?

我正在开发带有一些类的库,我们称它们为C1, C2 and ... Cn.这些类中的每一个都实现一些接口,即I1, I2, ... Im.(n> m).库中对象之间的关系很复杂,我必须 提供一些API,供我的图书馆用户使用智能指针访问这些对象. 经过一些讨论,我发现将共享指针返回给库用户不是一个好主意,因为在那种情况下,我不能确保可以在我的库的内存中精确地删除该对象.返回弱指针有相同的问题, ..
发布时间:2020-07-14 02:19:25 C/C++开发

是否有诸如weak_ptr之类的东西无法锁定(提升为shared_ptr)?如果没有,为什么?

也许以前有人问过这个问题,但我从未找到满意的答案.另外,为简单起见,假设我在谈论单线程应用程序. 所以,我听到过很多次,如果您有一个不拥有并且其使用寿命可以保证的对象,则应该引用它带有原始指针.对象的所有者将使用unique_ptr,并根据需要分发原始指针. 但是,如果对象是非所有者,并且生存期不能保证 ,该怎么办?然后可以使用weak_ptr,是的.但是,随后任何人都可能会收到一个w ..
发布时间:2020-07-14 02:19:21 C/C++开发

shared_ptr的周期性依赖关系问题是什么?

我了解了共享指针,并了解了如何使用.但是我从来没有理解共享指针的循环依赖问题以及弱指针如何解决这些问题.有人可以清楚地解释这个问题吗? 解决方案 问题并不复杂.让-->表示共享指针: The rest of the program --> object A --> object B ^ | ..
发布时间:2020-07-14 02:19:16 C/C++开发

如何检查weak_ptr是否为空(未分配)?

有没有办法区分已分配(可能已过期)的weak_ptr和未分配的weak_ptr. weak_ptr w1; weak_ptr w2 = ...; 我了解以下针对未分配或到期的检查,但是是否有(更便宜的)检查仅针对未分配? if (!w.lock()) { /* either not assigned or expired */ } 解决方案 您可以使用两次 ..
发布时间:2020-07-14 02:18:13 C/C++开发

为什么不能从unique_ptr构造weak_ptr?

如果我理解正确,那么weak_ptr不会增加托管对象的引用计数,因此它不表示所有权.它只是让您访问一个对象的生命周期,该对象的生命周期由其他人管理. 所以我真的不明白为什么不能从unique_ptr构造weak_ptr,而只能从shared_ptr构造. 有人可以简要解释一下吗? 解决方案 std::weak_ptr不能使用,除非您通过lock()方式将其转换为std::shared ..
发布时间:2020-07-14 02:17:08 C/C++开发

将shared_ptr分配给weak_ptr

我想将构造的shared_ptr分配给weak_ptr: std::weak_ptr rw = std::shared_ptr(operator new(60), [](void *pi) { operator delete(pi); }); 但是,当我执行rw.expired()时,它显示已过期,表示它为空.有什么建议可以解决我的问题吗? 谢谢. ..
发布时间:2020-07-14 02:17:03 C/C++开发

weak_ptr,make_shared和内存释放

shared_ptr的控制块在存在至少一个weak_ptr时保持活动状态.如果共享指针是用make_shared创建的,则意味着该对象的整个内存将保持分配状态. (对象本身已被适当地破坏,但是由于对象的控制块和内存是像make_shared一样分配在一个块中的,因此只能将它们一起释放.) 我的理解正确吗? 例如,著名的缓存示例" .对象的内存将永远保持分配状态. 在任何实际情况下 ..
发布时间:2020-07-14 02:15:51 C/C++开发