C ++でテトロミノのクラスがあります。そのコンソールゲームと私がしていることは、bと呼ばれるラインオブジェクトから始めることです。次に、ユーザー入力に基づいて、ゲームループでbを使用してメソッドなどを実行します。ブロックが地面に着いたら、それを破壊して、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();
}
とは言うものの、その場所に新しい変数を作成する限り、自動(または静的)変数を破棄することは技術的に可能です(あなたの意図どおり)。
破壊はデストラクタを呼び出すことによって行われますが、構築は配置を使用して行われます-新しい式:
b.~line();
new(&b) line;
ただし、このアプローチには、単一のオブジェクトを全体に保持するよりも多くの注意点があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加