简体   繁体   English

C ++ std :: make_shared

[英]C++ std::make_shared

The following code snippet is from the book C++ Concurrency In Action Practical Multithreading page 152, a thread-safe stack class. 以下代码段摘自《 C ++并发性实践实用多线程》第152页,这是线程安全的堆栈类。 My question is why the following pop function (of the thread-safe stack class) can't just return std::make_shared<T>(std::move(data.top()) instead, where data is of type std::stack<T> since make_shared<T> returns a shared_ptr ? Thank you in advance! 我的问题是,为什么下面的pop函数(线程安全堆栈类的)不能仅仅return std::make_shared<T>(std::move(data.top()) ,而数据是std::stack<T>类型的std::stack<T>因为make_shared<T>返回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;
}

This because you need to store value in temporary variable (res), before it will destructed by pop() call. 这是因为您需要将值存储在临时变量(res)中,然后再由pop()调用破坏它。

std::shared_ptr<T> pop()
{
    std::lock_guard<std::mutex> lock(m);
    if(data.empty()) throw empty_stack();
    // data.pop(); will remove top element
    return std::make_shared<T>(std::move(data.top())); // top element has not changed
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM