我正在使用复制构造函数来获取MapObject
并复制它及其属性
但是,这个对象已经产生了游戏,所以在构造时我想从游戏中删除对象。
基本上,我正在尝试做的是:
MapObject::MapObject(const MapObject& _mapobject)
{
_mapobject.Derez();
Rez();
}
如何在复制构造函数中完成该操作而不在const&
上调用它?
编辑: 切换到智能指针向量完全解决了这个问题。
答案 0 :(得分:2)
您可以制作可变复制构造函数:
MapObject::MapObject(MapObject& _mapobject) // << no const here
但是你留下了一个不复制的拷贝构造函数,这只是在惹麻烦。
答案 1 :(得分:1)
我强烈建议您不要让复制构造函数修改其参数的逻辑状态。这是非惯用的,很可能导致混乱。
相反,在呼叫现场做这样的事情:
MapObject o2 = o1;
o1.remove();
答案 2 :(得分:1)
如果Derez
为const
,您只能拨打电话。
但对我而言,设计似乎是错误的。为什么要创建副本会从游戏中删除原始文件?为什么班级负责首先从游戏中删除自己的实例?为什么你甚至试图复制已经在游戏中的对象?
对我而言,这似乎比实际调用该方法更重要。