在变量定义期间是否有可能发生异常?

时间:2016-03-23 02:16:47

标签: c++ multithreading exception-handling

class ThreadGuard {
public:
    ThreadGuard(std::thread &t_): t(t_) {}
    ~ThreadGuard()
    {
        if(t.joinable()) 
            t.join();
    }
private:
    std::thread &t;
};

void func()
{
    std::thread my_thread(f);
    ThreadGuard thread_guard(my_thread);
}

我尝试使用ThreadGuard对象来保证在线程正常终止之前func不会退出。但是如果在创建thread_guard对象之前发生异常会怎样。

1 个答案:

答案 0 :(得分:0)

RAII的要点是资源获取对象实际拥有资源。您的null仍然不能保证线程实际上是被保护的。你会想要更像的东西:

ThreadGuard

这样,你可以写:

class ThreadGuard {
    std::thread t;

public:
    ~ThreadGuard() {
        if (t.joinable()) t.join();
    }

    // constructors and assignment as appropriate to actually
    // initialize the thread object
};

而不用担心。