我正在使用复制构造函数来获取MapObject
并复制它和它的属性。
但是,这个对象已经生成到游戏中,所以在构建时我想从游戏中删除这个对象。
本质上,我想要做的是:
MapObject::MapObject(const MapObject& _mapobject)
{
_mapobject.Derez();
Rez();
}
我怎样才能在复制构造函数中完成它而不调用它const&
?
编辑:切换到智能指针向量完全解决了这个问题。
我正在使用复制构造函数来获取MapObject
并复制它和它的属性。
但是,这个对象已经生成到游戏中,所以在构建时我想从游戏中删除这个对象。
本质上,我想要做的是:
MapObject::MapObject(const MapObject& _mapobject)
{
_mapobject.Derez();
Rez();
}
我怎样才能在复制构造函数中完成它而不调用它const&
?
编辑:切换到智能指针向量完全解决了这个问题。
您可以制作一个可变的复制构造函数:
MapObject::MapObject(MapObject& _mapobject) // << no const here
但是你会得到一个不复制的复制构造函数,这只是在自找麻烦。
我强烈建议不要让您的复制构造函数修改其参数的逻辑状态。这是非惯用语,并且可能会导致混乱。
相反,在呼叫站点做这样的事情:
MapObject o2 = o1;
o1.remove();
Derez
如果is ,您只能调用它const
。
但在我看来,设计似乎是错误的。为什么创建副本会从游戏中删除原件?为什么类首先要负责从游戏中删除自身的实例?你为什么还要尝试复制游戏中已经存在的对象?
对我来说,这似乎比实际调用该方法更重要。