【发布时间】:2020-01-09 05:10:42
【问题描述】:
class SmartPointer
{
int* _data;
public:
explicit SmartPointer(int* data) : _data(data)
{}
};
这段代码编译:
SmartPointer p(nullptr);
但是这个没有:
SmartPointer p = nullptr; // error C2440: 'initializing': cannot convert from 'nullptr' to 'SmartPointer'
这两种调用复制构造函数的方式不是等价的吗?
【问题讨论】:
-
它们不等价。第一个是直接初始化,第二个是复制初始化。都不涉及复制构造函数。
-
赋值运算符与复制构造函数不同。
-
@Ripi2 代码中没有赋值运算符。
-
我尝试修复“复制构造函数的两种方式”(只有一种),同时尝试保持答案有效,如果您不喜欢它,只需重新滚动编辑
标签: c++ copy-constructor