C++ how to delete a structure?

跟風遠走 提交于 2019-11-29 11:47:32

问题


Structure I created:

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

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

       //...

How now to delete it now?


回答1:


delete newVideSample;

This won't free any memory you allocated to newVideoSample->buffer though - you have to free it explicitly before deleting.

//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;

Normally this kind of freeing is written in the destructor of the class so that it'll be called automatically when you delete the dynamically created object.

Thanks @steve for mentioning it :)




回答2:


delete newVideoSample;

But if the new and delete are in the same context, you're probably better off skipping them and just creating it on the stack instead:

VideoSample newVideoSample = {buf, size};

In that case, no cleanup is necessary.




回答3:


You're looking for the delete keyword:

delete newVideoSample;



回答4:


delete newVideoSample;

However, consider using a smart pointer that will release the memory automatically, for example:

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



回答5:


Unless I'm missing something, you just use delete:

delete newVideoSample;



回答6:


delete newVideoSample . In C++ struct is the same as class but with default public fields.




回答7:


Use delete

VideoSample * newVideoSample = new VideoSample;
//.. stuffs

delete newVideoSample;

There is also an overload i.e delete[]

VideoSample * newVideoSample = new VideoSample[n];
//.. stuffs

delete [] newVideoSample;

In Modern C++ it is always recommended to use smart pointers. You may want to use boost::shared_ptr<T> from the boost library.




回答8:


If you intended VideoSample to free its buffer member then VideoSample is a fragile class. It has no way of knowing whether buf was created in the heap using new[] or malloc, or is the address of a variable on the stack.




回答9:


In C++ a structure is the exact same as a class except everything is public by default, where a class is private by default. So a structure can have a destructor and is freed with delete.




回答10:


To Allocate -> VideoSample * newVideoSample = new VideoSample;

To Delete -> delete newVideoSample;

If you deleting the object in the same context, you better just allocate it on the stack. If you deleting it outside the context don't forget to pass a reference.

And most important, don't delete if your about to exit process, it's pointless :P




回答11:


**You create object of Videosample , so you just use delete..

VideoSample * newVideoSample = new VideoSample; delete newVideoSample;**



来源:https://stackoverflow.com/questions/4134323/c-how-to-delete-a-structure

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!