- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在考虑使用 boost::weak_ptr 来实现一个对象池,这样当没有人使用其中一个对象时,它们就会被回收。不过,我担心的是,它是一个多线程环境,而且似乎在指向超出范围的对象的最后一个 shared_ptr 与从 weak_ptr 构造的新 shared_ptr 之间存在竞争条件。通常,您会使用锁或其他东西来保护此类操作;然而,这里的重点是您不知道 shared_ptr 何时可能超出范围。
我对 boost::shared_ptr 和 boost::weak_ptr 有什么误解吗?如果没有,有人对做什么有什么好的建议吗?
谢谢。
安德鲁
最佳答案
要使用 weak_ptr
,您通常必须通过构造 shared_ptr
来获取强引用。这最后一步是原子的:你要么得到一个强引用,要么你得到一个 bad_weak_ptr
抛出的异常。 (或者,在 weak_ptr
上调用 lock()
,并获得强引用或 null。)
示例(使用 lock()
;很容易适应其他风格):
void do_something(weak_ptr<foo> weak) {
// Grab strong reference
shared_ptr<foo> strong(weak.lock());
if (strong) {
// We now have a strong reference to use
} else {
// No strong references left; object already freed
}
}
关于c++ - Boost weak_ptr在多线程程序中实现资源池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160334/
SQL Server 2008 链接服务器和临时插入导致快速内存泄漏,最终导致服务器无响应并以以下错误结束: Msg 701, Level 17, State 123, Server BRECK-PC
我收到此错误: 资源池“默认”中的系统内存不足,无法运行此查询。 我正在运行 100,000 个简单的插入语句,如下所示。我在第 85,000 次插入时遇到了错误。 这是我正在学习的类(class)的
我已将 commons-pooling-1.6.jar 添加到我的类路径并尝试实例化一个 StackObjectPool 但每次都失败: // Deprecated. ObjectPool oPool
我有一个正在运行的服务,每分钟可获得 50-100 个查询。这些都不是高成本查询。该服务已经运行了大约 3-4 个月,没有出现任何错误。 几天前突然开始出现“资源池‘默认’中的系统内存不足,无法运行此
我只是想右击然后选择“从数据库生成模型”。我得到了错误: Unable to generate the model because of the following exception: 'An er
我是一名优秀的程序员,十分优秀!