Do I have to delete struct pointer manually in C++

2019-09-20 18:27发布

Somebody told me that I don't necessarily have to delete struct pointer manually.
From what I understand you must delete everything that is allocated with new, even structs, right?

4条回答
我命由我不由天
2楼-- · 2019-09-20 18:34

Right, you must. As with everything else, if you allocated memory fore something, you are responsible for releasing it.

查看更多
Rolldiameter
3楼-- · 2019-09-20 18:34

Of course when you new any type (int, char, ..., MyClass, MyStruct) you are reserving some memory, so you will need to free it later yourself.

delete for any new

delete[] for any new[] ...

查看更多
看我几分像从前
4楼-- · 2019-09-20 18:37

In general, you need a delete for every new, delete [] for every new [], fclose for every fopen and all the other varieties.

Still, you need not neccessarily write it yourself, if you delegate it to a smart-pointer for example, like unique_ptr and shared_ptr.
You should do that on general principles anyway!

Also, there actually are a few circumstances in which never de-allocating is appropriate, like if you store some data you will have to keep until the end of the program, unless the destructor does something important.

Actually, there's no need to bother sweeping the carpets when the house gets demolished, and it would have a negative performance impact, which might easily get unacceptibly big.
Think about it "Come here (page in), so I can dismiss you (free)." seems a bit pointless or even spiteful.

查看更多
Summer. ? 凉城
5楼-- · 2019-09-20 18:59

You could use smart pointers as for example std::unique_ptr. It would call its own deleter when the object of the structure was destroyed.

Otherwise you indeed have to call operator delete or delete [] provided that the structure is the owner of the pointer.

查看更多
登录 后发表回答