独特的 ptr 和移动语义
unique ptr and move semantics
我有以下关于唯一指针和所有权转移的问题
假设如下
class Base
{
Base()
{
}
void foo(unique_ptr<Base> p)
{
}
};
void main()
{
Base b;
b.foo(std::unique_ptr<Base> p(new Base);
}
上面的代码部分创建了一个时间唯一指针,我预计会出现编译错误。但是代码可以编译。
我希望唯一有效的函数原型是
void foo(unique_ptr<Base> && p)
我很惊讶,函数的两个签名是有效的。
您能否解释一下为什么当我们传递右值引用时 void foo(unique_ptr p) 有效?
谢谢
std::unique_ptr
有一个右值构造函数,因此您可以从右值构造一个。调用以 class 类型作为参数的函数只需要为 class1 有一个 1 参数的非显式构造函数,它可以构造class 从提供给调用的参数类型。
1这不是调用此类函数的唯一方法;还有其他涉及显式转换运算符的方法
我有以下关于唯一指针和所有权转移的问题 假设如下
class Base
{
Base()
{
}
void foo(unique_ptr<Base> p)
{
}
};
void main()
{
Base b;
b.foo(std::unique_ptr<Base> p(new Base);
}
上面的代码部分创建了一个时间唯一指针,我预计会出现编译错误。但是代码可以编译。 我希望唯一有效的函数原型是
void foo(unique_ptr<Base> && p)
我很惊讶,函数的两个签名是有效的。 您能否解释一下为什么当我们传递右值引用时 void foo(unique_ptr p) 有效? 谢谢
std::unique_ptr
有一个右值构造函数,因此您可以从右值构造一个。调用以 class 类型作为参数的函数只需要为 class1 有一个 1 参数的非显式构造函数,它可以构造class 从提供给调用的参数类型。
1这不是调用此类函数的唯一方法;还有其他涉及显式转换运算符的方法