假设类 MyClass 具有构造函数:
MyClass::MyClass( ... ) {
var = new OtherClass( ... );
}
并假设类 OtherClass 具有复制构造函数:
OtherClass::OtherClass(const OtherClass &obj) {
for (int i = 0; i < array_size; ++i) {
array[i] = obj.array[i];
}
}
以下是为MyClass编写复制构造函数的推荐方法吗?
MyClass::MyClass(const MyClass &obj) {
var = new OtherClass(*obj.var);
}
我问,因为我无法找到上述复制构造函数使用的解除引用语法的示例。
编辑:对不起,我在复制构造函数中留下了一个拼写错误(在我尝试将代码示例抽象化时引入):*obj.array
的目的是*obj.var
1}}。
答案 0 :(得分:2)
不,这没有多大意义。有道理的是:
MyClass::MyClass(const MyClass &obj) {
var = new OtherClass(*obj.var);
}
或者更确切地说:
MyClass::MyClass(const MyClass &obj)
:var(new OtherClass(*obj.var))
{}
答案 1 :(得分:1)
假设var
实际上是MyClass的成员和指向OtherClass
的指针,我会写
MyClass::MyClass(const MyClass &obj) : var(new OtherClass(obj.array))
{
...
}
答案 2 :(得分:0)
是的,通常建议复制者使用const
参考参数。
您无需取消引用引用。将您的代码更改为:
MyClass::MyClass(const MyClass &obj) {
var = new OtherClass(obj.array);
}