0

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

本质上,我想要做的是:

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

我怎样才能在复制构造函数中完成它而不调用它const&

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

4

3 回答 3

2

您可以制作一个可变的复制构造函数

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

但是你会得到一个不复制的复制构造函数,这只是在自找麻烦。

于 2012-06-16T17:03:00.477 回答
1

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

相反,在呼叫站点做这样的事情:

MapObject o2 = o1;
o1.remove();
于 2012-06-16T17:04:12.493 回答
1

Derez如果is ,您只能调用它const

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

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

于 2012-06-16T17:04:21.930 回答