R值引用和std :: make_unique

问题描述 投票:1回答:1

假设我有一个类Foo_obj的初始化对象Foo,并希望创建一个指向该对象副本的唯一智能指针。代码auto pointer = make_unique<Foo>(Foo_obj)执行并执行此操作。但是,当在reference中查找std::make_unique时,这仅接受R值引用作为参数,并使用这些参数调用相应类的构造函数。

我的理解是,诸如Foo_obj之类的对象是l值,因此上述代码不应编译。我想念什么?

c++
1个回答
1
投票

[当您遇到template <typename T> void foo (T&& rt) {...}之类的东西时,就会发生称为参考碰撞的事情,这就是Meyeres所称的“通用参考”。简而言之,如果传递右值,则将成为右值引用;如果传递左值,则将成为左值引用。这样,函数可以将所有参数完美地转发到unique_ptr的构造函数。该人自己在this博客中了解有关通用引用的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.