在复制构造函数中调用常量引用的方法

Call method of a const reference in a copy constructor

本文关键字:引用 方法 常量 调用 复制 构造函数      更新时间:2023-10-16

>我正在使用复制构造函数来获取MapObject并复制它及其属性。
但是,这个对象已经生成到游戏中,所以在构造上我想从游戏中删除这个对象。

从本质上讲,我要做的是:

MapObject::MapObject(const MapObject& _mapobject)
{
    _mapobject.Derez();
    Rez();
}

如何在复制构造函数中完成此操作而无需在const&上调用它?

编辑:切换到智能指针向量完全解决了这个问题。

你可以做一个可变的复制构造函数

MapObject::MapObject(MapObject& _mapobject) // << no const here

但是,您留下了一个不复制的复制构造函数,那只是自找麻烦。

只有在Derez const时才能调用它。

但对我来说,设计似乎是错误的。为什么要创建副本会从游戏中删除原件?为什么类首先负责从游戏中删除自身的实例?为什么你甚至试图复制游戏中已经存在的对象?

对我来说,这似乎比实际调用该方法更重要。

我强烈建议不要让您的复制构造函数修改其参数的逻辑状态。 这是非惯用语,可能会导致混乱。

相反,在调用站点执行类似操作:

MapObject o2 = o1;
o1.remove();