C++コードのメモリ管理に関する一般的な質問があります。コンパイラは、オブジェクトへのポインタを、スタック上で動的に初期化したオブジェクトへの新しいポインタで置き換えると、潜在的なメモリリークがあると訴える。例:私はその後、ポインタC++のポインタとスタックのメモリ管理
int i = 1; int* c = &i; foo(c);
の状態を変更するには、この機能を使用
int* foo(int* h){
int* b = new int(5);
b = h; //Memory leak here. How do I delete b without creating a dangling pointer?
return b;
}
は、だから私の質問は、私は上記のものと同様の機能を持つクラスを持っています。 foo関数からbをいつ削除できますか?
delete b;
このデストラクタに行くだろう(私は時間の関数fooの負荷を使用していて、私を助けないであろう。ヒープはおそらくアップ慣れるでしょうので......?)
もしI上記の十分な情報を提供していません。私にお知らせください。
を明確にすべき基本から始めレッツ:あなたの関数 'foo'は値がまったくそのパラメータによって指さ変更されません。正確に何をすべきか? – Jon
'foo(c);'は 'c 'と何もしません – rmflow
あなたの質問を理解できませんでした。しかし、メモリリークの危険性があります。例えば:foo(new int);ここでintは、fooを呼び出すときにリークされます –