2016-03-20 9 views
0

誤って、私はファクトリ関数を使用し、返されたポインタをどこにも格納しませんでした。私の質問が愚かであるかどうかわからない場合 しかし、私たちが動的に関数内でメモリを割り当てると、そのメモリは返されますが、格納するポインタはありません。だからメモリには何が起こるのですか?それはそれを削除する機会が全くないということですか?そして、このような :プログラムが閉じるまでありポインタがない場合はどうなりますか、ファクトリ関数ポインタを取得しますか?

Aclass* getAclass() 
{ 
    return new Aclass(); 
} 

int main() 
{ 
    getAclass(); 
} 
+0

良い工場は 'std :: unique_ptr 'を返します。この特定の問題を解決するだけでなく、より現実的なコードの一般的な問題も解決します: 'std :: cout << getAclass() - > getDescription();また、工場に 'makeFoo'という名前を付けるようになっている慣例がありますので、彼らはゲッターではないことを知っています。 – MSalters

答えて

3

は、それが維持され、オペレーティングシステムは、そのメモリを再利用します。少なくとも、ハードウェアメモリマネージャを持つメモリマネージャまたはシステムを持つオペレーティングシステム。

"garbage collectors"がある言語では、ポインタが未使用メモリを指していることに気づく可能性があり、そのメモリ自体が削除されます。ポインタが返されることなくメモリを取得することはできません。そのポインタを使用しないと、メモリが使用されなくなったことを言語が理解していると仮定してガベージコレクションされます。

+0

@shayan C++タグを追加する前にあなたの質問に答えました。 – Rob

+1

C++のガベージコレクタは存在しますが、それらを使用する人はほとんどいません –

関連する問題