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

Copy constructor difference for std::unique_ptr

提问人:Ajay Brahmakshatriya 提问时间:12/4/2022 更新时间:12/4/2022 访问量:85

问:

如果我的理解是正确的,下面的声明都应该调用复制构造函数,其 type of 作为参数。Tx

T t = x;
T t(x);

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

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

调用复制构造函数的两种语法是否有区别?

C++ 复制构造函数

评论

1赞 Quimby 12/4/2022
C++中至少有 7 种不同的初始化方式
0赞 Ajay Brahmakshatriya 12/4/2022
@Quimby感谢您的参考。我会检查差异。

答:

2赞 lorro 12/4/2022 #1

的构造函数 ,这意味着,您需要在第一种情况下编写它: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()

评论

0赞 Ajay Brahmakshatriya 12/4/2022
明白了!一般来说,有没有办法为这两种情况定义不同的构造函数?也与赋值运算符分开。
2赞 David G 12/4/2022 #2

std::unique_ptr::unique_ptr( pointer p )是一个显式构造函数,因此不允许这种形式的初始化。初始化方式始终需要用于隐式转换的转换构造函数。=