【发布时间】:2019-11-04 23:37:48
【问题描述】:
我在公司中看到过很多代码,其中函数采用右值参数。
例子:
void Notifier::PostEvent(std::unique_ptr<IEvent>&& event)
{
std::unique_lock<std::mutex> lock(m_Mutex);
m_events.push_back(std::move(event));
m_conditionVariable.notify_all();
}
这里没有模板。这很容易写成这样:
void Notifier::PostEvent(std::unique_ptr<IEvent> event)
{
std::unique_lock<std::mutex> lock(m_Mutex);
m_events.push_back(std::move(event));
m_conditionVariable.notify_all();
}
由于参数 'event' 在这两种情况下都是接收器值,因此它们实际上是相同的。我认为第一个版本的唯一优点是它为 unique_ptr 保存了一个移动构造函数。那是对的吗?真的值得吗?
【问题讨论】: