C++ 使用正在进行的函数调用销毁对象
假设我有一个类A和资源B。类A有一个函数,在我想要销毁互斥锁之前,它不会获取互斥锁。我调用boost::shared_ptr::reset()来销毁类A的实例。资源B保证在那个时候销毁吗C++ 使用正在进行的函数调用销毁对象,c++,boost,mutex,shared-ptr,C++,Boost,Mutex,Shared Ptr,假设我有一个类A和资源B。类A有一个函数,在我想要销毁互斥锁之前,它不会获取互斥锁。我调用boost::shared_ptr::reset()来销毁类A的实例。资源B保证在那个时候销毁吗 class Resource{ public: Resource(){ } ~Resource(){ free(); } void init() {} void free() {} }; class A{ public: A(){ B.init(); } ~
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);
}
在您的场景中,B是a的成员。当a被销毁时,它将被销毁(并调用
free()
)。不需要显式调用
但是,在您的代码中,无法保证您的指针.reset()
分配的对象会被销毁:只有当指针
是指向此对象的唯一共享\u ptr
时,它才会被销毁,也就是说,指针自创建以来没有复制过(这里没有这方面的证据,但需要在您的真实代码中进行检查)
顺便说一下,您的代码中缺少一个t.join()
pointer->freeB();
pointer.reset();