所以我在这里有一个奇怪的情况。我有以下代码:当boost线程创建时shared_ptr从不释放
int main()
{
std::shared_ptr<MyClassA> classA = std::shared_ptr<MyClassA>(new MyClassA);
std::shared_ptr<MyClassB> classB = std::shared_ptr<MyClassB>(new MyClassB(classA));
boost::thread_group threadGroup;
// This thread is essentially an infinite loop waiting for data on a socket
threadGroup.create_thread(boost::bind(&MyClassB::method1, classB));
...do stuff
return 0;
}
MyClassB打开多个资源,未释放的程序退出时。但是,如果我删除了对create_thread的调用,则会释放资源。我在MyClassB的析构函数中放置了一个打印输出,并验证如果该线程已创建,则不会调用它。
有人对这里发生了什么有所了解吗?
您是否尝试过加入线程?否则,终止程序可能会跳过非全局对象的析构函数。这就是说,为什么不创建一个最小的例子,而不是解释你为了分析问题而做了什么?哦,我忘记了:改用'std :: thread'! –
我相信boost线程会在它们的析构函数中被分离。 –
“MyClassB :: method1”的签名是什么? – NathanOliver