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

时间:2011-04-14 17:14:20

标签: c++ pass-by-reference composition copy-constructor

假设类 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}}。

3 个答案:

答案 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);
}