在包含其他对象的类的副本构造函数中取消引用语法

|| 假设类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
。     
已邀请:
不,那真的没有道理。这是有道理的:
MyClass::MyClass(const MyClass &obj) {
    var = new OtherClass(*obj.var);
}
更确切地说:
MyClass::MyClass(const MyClass &obj)
    :var(new OtherClass(*obj.var))
{}
    
假设
var
实际上是MyClass的成员并且是指向
OtherClass
的指针,我将写
MyClass::MyClass(const MyClass &obj) : var(new OtherClass(obj.array))
{
   ...
}
    
是的,通常建议复制控制器使用
const
参考参数。 您不需要取消引用参考。将您的代码更改为:
MyClass::MyClass(const MyClass &obj) {
    var = new OtherClass(obj.array);
}
    

要回复问题请先登录注册