我用unique_ptr成员分析一个类。可以从不同的线程使用该成员。还有一种销毁该成员的方法:
void uninitialize()
{
std::unique_ptr<Worker> worker;
{
std::lock_guard<std::mutex> guard(mtx_);
worker = std::move(worker_);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道该暗示的目的是什么。上面和下面的实现之间有什么区别吗?:
void uninitialize()
{
std::lock_guard<std::mutex> guard(mtx_);
worker_.reset();
}
Run Code Online (Sandbox Code Playgroud)
Worker没有定义move构造函数。
不同之处在于,在第一个代码段中,互斥对象将仅保留足够长的时间,worker以取得对所worker_拥有对象的所有权。该物体的破坏将不受保护。在第二个片段中,互斥锁直到.reset()完成才被释放,这意味着在对象被销毁时它会被保留。