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ますconst

しかし、私には、デザインが間違っているように思えます。コピーを作成するとオリジナルがゲームから削除されるのはなぜですか? そもそもクラスがゲームから自身のインスタンスを削除する責任があるのはなぜですか? すでにゲーム内にあるオブジェクトをコピーしようとしているのはなぜですか?

私には、これは実際にそのメソッドを呼び出すよりも重要に思えます。

于 2012-06-16T17:04:21.930 に答える