bar
がスコープ外であると、スタックから削除されます後からFoo()
をクリーンアップする方法がないので、だから私はとき*(新しいはFoo)を使用する
Foo bar = *(new Foo());
のようなものを持つ問題について読みますヒープ。実用的な用途はありますか?
bar
がスコープ外であると、スタックから削除されます後からFoo()
をクリーンアップする方法がないので、だから私はとき*(新しいはFoo)を使用する
Foo bar = *(new Foo());
のようなものを持つ問題について読みますヒープ。実用的な用途はありますか?
Foo& foo = *(new Foo);
delete &foo;
しかし、しないでください。それは将来のメンテナーを混乱させ、それに正当な理由はない。ポインタを使用します。
なぜこれは正確に機能しますか?私の例とあなたのものからの 'foo'の出力が同じ値を返すのはなぜですか? –
@push_ebp - この例では、新しいオブジェクトの**コピー**を作成します。私のコードでは、新しいオブジェクトにコピーすることなく**参照**を作成します。私は、あなたが 'Foo'のコードを表示しなかったので、あなたの例から' 'foo'"を出力しているかどうかわかりません。 –
私は簡単な 'int&a = *(new int(10))'で答えを試しました。しかし、 'cout << a'は印刷されたアドレスにはならないはずですか?なぜ、その時点で「10」が印刷されていますか? –
"実用的な"ものがない多くのものを書くことができます。あなたはこの問題で問題を特定したようです。特にこの表現について聞かれましたか?あなたはそれがどこかで使用されているのを見ましたか? –
'new Foo()'によって作成されたオブジェクトはすぐに**リークします**。これを使う時間は決してありません。 – StoryTeller
技術的には、 'Foo'のデフォルトのコンストラクタは、作成されたオブジェクトへのポインタをどこかに格納し、漏れを避けることができますが、それは非常に特殊で壊れやすいでしょう。 – aschepler