c++ std::unique_ptr的复制构造函数差异

ht4b089n  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(208)

如果我的理解是正确的,下面的声明都应该调用T的复制构造函数,它将x的类型作为参数。

T t = x;
T t(x);

但是,当我对std::unique_ptr<int>执行相同的操作时,第一个声明会出现错误,而第二个声明会编译并执行预期的操作。

std::unique_ptr<int> x = new int();
std::unique_ptr<int> x (new int());

调用复制构造函数的两种语法有什么区别吗?

u5rb5r59

u5rb5r591#

std::unique_ptr<>的构造函数是explicit,这意味着,在第一种情况下需要编写它:

std::unique_ptr<int> x = std::unique_ptr<int>(new int());
// or
auto x = std::unique_ptr<int>(new int());
// or make_unique()
laik7k3q

laik7k3q2#

std::unique_ptr::unique_ptr( pointer p )是显式构造函数,因此不允许使用这种形式得初始化.使用=进行初始化始终需要converting-constructor进行隐式转换.

相关问题