一个难以理解的C++有关问题,关于C++11多线程和智能指针
一个难以理解的C++问题,关于C++11多线程和智能指针
我也不知道该怎么描述,不太能理解,大概代码结构如下:
如果我按上面这么写,后面处理函数最终运行下来就不对劲,数据会有问题。
但是如果我不把pB_的初始化放在初始化列表里而是放在loop的注释掉的那一行,就正常了……
请问下有没有这方面的要求说智能指针初始化需要注意当时的线程环境?
------解决思路----------------------
以前碰到过类似的问题,在线程中使用另一个线程初始话的对象会有问题。
建议:既然用了C++11,为什么不用C++11的智能指针,tr1都好老了。
我也不知道该怎么描述,不太能理解,大概代码结构如下:
#include <tr1/memory>
#include <thread>
class A
{
public:
A()
:pB_(new B),
iThr(&A::loop, this)
{}
void loop()
{
//pB_ = std::tr1::shared_ptr<B>(new B);
...处理函数
}
private:
std::tr1::shared_ptr<B> pB_;
std::thread iThr;
}
如果我按上面这么写,后面处理函数最终运行下来就不对劲,数据会有问题。
但是如果我不把pB_的初始化放在初始化列表里而是放在loop的注释掉的那一行,就正常了……
请问下有没有这方面的要求说智能指针初始化需要注意当时的线程环境?
------解决思路----------------------
以前碰到过类似的问题,在线程中使用另一个线程初始话的对象会有问题。
建议:既然用了C++11,为什么不用C++11的智能指针,tr1都好老了。