[解決済み] 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;
しかし、この方法は、全体を通して単一のオブジェクトを維持するよりも多くの注意点があります。
関連
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない