以下代码片段来自 C++ Concurrency In Action Practical Multithreading 第 152 页,一个线程安全的堆栈类。我的问题是为什么下面的 pop 函数(线程安全堆栈类的)不能只是return std::make_shared<T>(std::move(data.top())
,其中 data 是类型,std::stack<T>
因为make_shared<T>
返回 a shared_ptr
?先感谢您!
std::shared_ptr<T> pop()
{
std::lock_guard<std::mutex> lock(m);
if(data.empty()) throw empty_stack();
std::shared_ptr<T> const res(std::make_shared<T>(std::move(data.top())));
data.pop();
return res;
}