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

时间:2012-06-16 16:59:36

标签: c++ reference const copy-constructor

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

基本上,我正在尝试做的是:

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

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

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

3 个答案:

答案 0 :(得分:2)

您可以制作可变复制构造函数

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

但是你留下了一个不复制的拷贝构造函数,这只是在惹麻烦。

答案 1 :(得分:1)

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

相反,在呼叫现场做这样的事情:

MapObject o2 = o1;
o1.remove();

答案 2 :(得分:1)

如果Derezconst,您只能拨打电话。

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

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