2012-02-16 11 views
0

私は指摘されているメモリを解放する適切な方法を理解しようとしています。この場合、ポインタは構造体の新しいインスタンスを指し示します。例はポインタが指している構造体のデータを削除するための適切な使い方

下に示されている構造は次のようである:

struct MyData 
    { 
     unsigned short int MYID;  
     unsigned short int MYCMD;  
    }; 

定義は以下です。

MyData* injdataRx; 

    myDataPtr = new MyData; // create new instance 

...ポインタが指している値に値を読み込むいくつかの処理を行います。フィールド。

もし私がその構造体で終わったら、ポインタが指しているもの(割り当てられた領域)が解放されていることを確認したいなら、私はこれを行います。

delete (myDataPtr); 

はそれのように「新しい」により作成された空きメモリがmyDataPtrは、それがのsizeofのMyDataを解放することのMyDataを型へのポインタであるので、知っていることをしていますか?それはどうなるの?

これを明確にするための助けとなります。

+0

"*これは、myDataPtrがMyDataのサイズを解放するポインタであるため、myDataPtrがMyDataのサイズを解放することを知っているので、「new」によって作成されたメモリを解放しますか?*"はい、オブジェクトのデストラクタを呼び出します。 – ildjarn

+0

それだけです。難しい部分は常にそれを削除することを覚えています。スマートポインタを使用する。 – Duck

答えて

1

はいそうです。基本的に、newを呼び出すと、割り当てられたバイト数がどこかに記録されます(これは標準では指定されておらず、実装に依存します)。とにかく、deleteを呼び出すと、このバイト数が参照されます。それは、あなたがそれを知らなかったにもかかわらず、システムが解放するバイト数を知る方法です。本の保管は舞台裏で行われます。

0

ildjarnとDuckはすでにコメントに言ったので、答えはYESです。

MyData * p; 
p = new MyData; 
delete (p);  // <- Yes, this frees the memory used for MyData. 
関連する問題