在C++ 11 &之上,在将std::thread直接存储为类的成员时有哪些优点或缺点:
std::thread my_thread;与将std::shared_ptr或std::unique_ptr存储到线程相反,如下所示:
std::shared_ptr<std::thread> my_thread_ptr;有任何代码选项比其他代码更好吗?或者没关系,只有两种不同的方式来处理线程对象。
发布于 2017-06-29 22:32:39
使用指针(或智能指针)成员可能有一些较不常见的原因,但对于常见的用法,似乎std::thread本身不适用或具有足够的灵活性:
std::thread已经支持它了。它可以在“不代表线程”状态下进行,稍后在需要时分配真正的线程,并且在销毁之前必须显式地使用joined或detacheded。std::thread已经支持移动和交换,因此不需要指针。std::thread没有任何虚拟成员函数。std::thread是标准库类,因此不能使其不透明。std::thread的脆弱场景。多个所有者谁可以分配,交换,分离或加入它(没有太多的其他操作与线程)可能会造成复杂。if (xthread.joinable()) xthread.join();或xthread.detach();。在拥有类的析构函数中,这也更健壮,更容易阅读,而不是将相同的东西转换为智能指针的删除器的代码。因此,除非有一些不寻常的原因,否则我们应该直接使用线程作为数据成员。
发布于 2017-06-29 19:22:20
如果您可以选择std::线程作为成员变量,那么就选择它。如果不是,考虑其他选择。不要将其包装在std::shared_ptr或std::unique_ptr中,除非您有认真的理由这样做。考虑到std::thread本身是可移动的,将其封装到智能指针中是非常不可能的。
https://stackoverflow.com/questions/44832054
复制相似问题