2016-05-08 6 views
-7

私は私がクラスで行われた整数を持つクラスを、持っていたのであれば、例えば、私はメモリから削除するには探していた、私はする必要があります:C++のメモリ管理に関して必要かつ必要なものは何ですか?

delete &myInteger; 

または私はちょうどできましたクラスの参照を停止する:

myIntClass* inc = new myIntClass(); 
inc.setInteger(2); 
inc = new IntClass(); 

+3

は良い初心者の本を検索します。 C++は独自のイディオムを持っていますので、それらを学ぶ必要があります。 – StoryTeller

+1

この2つのスニペットは、(おそらく)未定義の動作とメモリリークです。私はランダムなものを試す代わりに本を読むことをお勧めします。 RAIIについての読解も助けになるかもしれない – user463035818

+0

あなたは本当に本を読む必要があります。あなたはC++メモリ管理について非常に混乱しているようです。ヒント:動的メモリ割り当てをまったく使用する必要がある場合は、スマートポインタを使用してください。 –

答えて

2
delete &myInteger; 

はスタック上に住んでいるポインタmyIntegerからを、解放するために無効試みです。あなたが動的なメモリ割り当てている場合、あなたはちょうどそれがに住んでいるスコープを終了する必要がmyIntegerのメモリを解放する(または登録)するには

{ 
    int myInteger; 
    myInteger = 5; 
} // myInteger goes away 

しかし、:。

int* myInteger = new int; 

をあなたの責任は明示的に近代的なCでは、それ

int* myInteger = new int; 
*myInteger = 5; 
delete myInteger; // release the memory pointed to, not the pointer 

を解放++、言語のこれらのシャープなエッジを避けるためや、などのC++ 11スマートポインタで動作するように良い習慣と考えられていますあなたのための問題に対処とstd::shared_ptr、:

{ // start scope 
    std::unique_ptr<int> myInteger std::make_unique<int>(); 
    *myInteger = 5; 
} // end scope -- unique_ptr cleans up for us. 
+0

したがって、 'new'で明示的にオブジェクトを作成しないと、C++はメモリを管理しますか? –

+0

@TylerWright新規作成ではない場合、たとえば'int i'はスタック上に作成され、自動的なスコープベースの存続時間を持ちます。 – kfsone

関連する問題