c++ - リモート - git tag 削除 一括



C++構造を削除する方法? (8)

C ++では、構造はクラスとまったく同じですが、デフォルトではすべてがパブリックであり、デフォルトではクラスはプライベートです。 そのため、構造体はデストラクタを持つことができ、deleteで解放されます。

私が作成した構造:

   struct VideoSample
  { 
      const unsigned char * buffer;
      int len;
  };

   VideoSample * newVideoSample = new VideoSample;
   newVideoSample->buffer = buf;
   newVideoSample->len = size;

       //...

今すぐ削除する方法


VideoSampleのbufferメンバーを解放するように意図した場合、VideoSampleは壊れやすいクラスです。 bufnew[]またはmallocを使用してヒープ内で作成されたのか、それともスタック上の変数のアドレスであるのかを知る方法はありません。


delete newVideoSample;

ただし、メモリを自動的に解放するスマートポインタの使用を検討してください。次に例を示します。

std::auto_ptr<VideoSample> newVideoSample(new VideoSample);

delete newVideoSample 。 C ++では、 structclassと同じですが、デフォルトのパブリックフィールドがあります。


あなたはdeleteキーワードを探しています:

delete newVideoSample;

割り当てるには - > VideoSample * newVideoSample = new VideoSample;

削除するには - > newVideoSampleを削除します。

同じコンテキストでオブジェクトを削除した場合は、単にスタックに割り当ててください。 コンテキスト外で削除した場合は、参照を渡すことを忘れないでください。

そして最も重要なのは、プロセスを終了しようとしているのであれば削除しないでください、それは無意味です:P


delete newVideSample;

ただし、 newVideoSample->buffer割り当てたメモリは解放されません。削除する前に明示的に解放する必要があります。

//Free newVideSample->buffer if it was allocated using malloc
free((void*)(newVideSample->buffer));

//if it was created with new, use `delete` to free it
delete newVideSample->buffer;

//Now you can safely delete without leaking any memory
delete newVideSample;

通常、このような解放はクラスのdestructorに書き込まれるので、動的に作成されたオブジェクトをdeleteと自動的に呼び出されます。

それを言及してくれてありがとう@steve :)


delete newVideoSample;

しかし、 newdeleteが同じコンテキストにある場合は、おそらくそれらをスキップして代わりにスタックに作成するほうが賢明です。

VideoSample newVideoSample = {buf, size};

その場合、クリーンアップは必要ありません。





structure