これは、私の本の 1 つにある質問であり (回答は添付されていません)、私は数日前から考えていました。答えは単純で、反復ごとにガベージ メモリ セルが作成されるため、C++ コードが最終的にクラッシュするということですか?
次の Java および C++ コード フラグメントを検討してください。これは、ユーザー設定を収集し、それらを使用してコマンドとそのパラメーターを組み立てる GUI ベースのアプリケーションの 2 つのバージョンの一部です。メソッド/関数 getUserCommandSpecification() は、コマンド コードとそのパラメーターを表す文字列を返します。返された文字列は、実行される必要なコマンドを構築するために使用されます。
次のことを前提とします。
(i) Command オブジェクト (Java の場合は cmd で参照、C++ の場合は cmd で参照) の while ループでの作成後、生成されたオブジェクトへの参照/ポインター cmd は参照または使用されなくなります。
(ii) アプリケーションは、そのメソッド/関数 execute() とともにクラス Command も定義します。
を。以下に詳述する 2 つのコード バージョンのうち、最終的にクラッシュするのはどれか。
b. プログラムのバージョンがクラッシュするのに、他のバージョンはクラッシュしない理由を説明してください。
Java コード
...
while (true) {
String commandSpecification = getUserCommandSpecification();
Command cmd = new Command(commandSpecification);
cmd.execute();
}
...
C++ コード
...
while (true) {
string commandSpecification = getUserCommandSpecification();
Command* cmd = new Command(commandSpecification);
cmd -> execute();
}
...