1. ホーム
  2. c++

[解決済み] C++でオブジェクトを破壊する方法

2022-03-13 23:38:31

質問

c++でテトロミノのクラスを持っています。ブロックが地面に落ちたら、それを破壊してbという新しいオブジェクトを作りたいのですが、この新しいオブジェクトbも今のところ線になります。 今のところ、私のコードはこのような感じです。

line b
while(!loss) {
     b.put();
     printmap();
     if(b.collision) {
         delete &b; //delete old b
         line b; //create new object also called b so that the same methods and logic run on this new object
     }
     b.y++;
     b.clear();
     system("cls");
}

解決方法は?

<ブロッククオート
delete &b;

それはしないほうがいい。 delete は、非配列の new . あなたは &b をアロケートする新しい式から取得します。


別の方向からこの問題にアプローチすることもできます。オブジェクトの数は変化しないので、オブジェクトを破壊して新しく作るのではなく、オブジェクトの状態が変化すると考えた方がずっとシンプルになるかもしれないのです。オブジェクトの数は変化しないので、オブジェクトの状態を変化させると考える方がはるかにシンプルです。

if(b.collision) {
     b.reset_state();
}


とはいえ、(あなたの意図通り)その場所に新しい変数を作成する限り、自動(または静的)変数を破壊することは技術的に可能です。

破壊はデストラクタの呼び出しで行い、構築はplacement-new式で行います。

b.~line();
new(&b) line;

しかし、この方法は、全体を通して単一のオブジェクトを維持するよりも多くの注意点があります。