And*_*ain 4 c++ multithreading boost smart-pointers
我正在考虑使用boost :: weak_ptr来实现一个对象池,这样当没有人使用其中一个对象时它们就会被收获.但我担心的是,它是一个多线程环境,似乎最后一个shared_ptr与一个超出范围的对象和一个从weak_ptr构造的新shared_ptr之间存在竞争条件.通常情况下,您可以通过锁定或其他方式保护此类操作; 但是,这里的重点是你不知道shared_ptr何时可能超出范围.
我是否误解了关于boost :: shared_ptr和boost :: weak_ptr的事情?如果没有,是否有人对如何做有任何好的建议?
谢谢.
安德鲁
Chr*_*ung 11
要使用a weak_ptr
,通常需要通过构造a来获取强引用shared_ptr
.最后一步是原子的:您要么获得强引用,要么bad_weak_ptr
抛出异常.(另外,调用lock()
上weak_ptr
,并要么得到一个有力的参考或空).
示例(有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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4187 次 |
最近记录: |