提问人:Ajay Brahmakshatriya 提问时间:12/4/2022 更新时间:12/4/2022 访问量:85
std::unique_ptr 的复制构造函数差异
Copy constructor difference for std::unique_ptr
问:
如果我的理解是正确的,下面的声明都应该调用复制构造函数,其 type of 作为参数。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());
调用复制构造函数的两种语法是否有区别?
答:
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 )
是一个显式构造函数,因此不允许这种形式的初始化。初始化方式始终需要用于隐式转换的转换构造函数。=
评论