【发布时间】:2015-11-10 06:41:19
【问题描述】:
假设我有资源 B 的类 A。类 A 有一个函数,在我想销毁它之前没有获取互斥锁。我调用 boost::shared_ptr::reset() 来销毁类 A 的实例。资源 B 是否保证在那时被销毁?
class Resource{
public:
Resource(){ }
~Resource(){ free(); }
void init() {}
void free() {}
};
class A{
public:
A(){ B.init(); }
~A(){}
void functionC(){
boost::lock_guard<boost::mutex> lock(Mutex);
// Stuck forever
boost::lock_guard<boost::mutex> lock2(Mutex);
}
private:
boost::mutex Mutex;
Resource B;
};
main(){
boost::shared_ptr<A> pointer(new A());
// Do a function call that gets stuck but allows main thread to continue
boost::thread t(boost::bind(&A::functionC, *pointer));
pointer.reset();
// Loop forever
while(1);
}
具体来说,我希望在调用pointer.reset() 时调用函数B::free()。这段代码是否保证可以做到这一点,还是我必须在某处明确调用它?显然我不想这么明确
pointer->freeB();
pointer.reset();
【问题讨论】:
标签: c++ boost mutex shared-ptr