问题
I learned C# and now I'm learning C++. The whole point of releasing a memory is new for me, and I want to know when I need to worry about memory releasing and when I don't.
From what I understand, the only case I have to worry about the release of memory, is when I used new operator, so I should to release the memory by using delete.
But in these cases there is no need to release the memory:
- Class variables (Members), or static variables.
- Local variables in function.
- STL family (string, list, vector, etc.).
Is this true?
And are there other cases where I have to worry about memory releasing?
回答1:
You basically got it right: You need to balance new with delete, new[] with delete[], and malloc with free.
Well-written C++ will contain almost none of those, since you leave the responsibiltiy for dynamic memory and lifetime management to suitable container or manager classes, most notably std::vector and std::unique_ptr.
回答2:
As a general rule of thumb I tend to abide by the following:
- If I code a
new/new[]i immediately code the correspondingdelete/delete[] - Likewise any
malloc/callocis immediately followed by the relevantfree
This avoids many nasty situations where you can generate a memory leak.
If you are new to C++ I would not get used to malloc and its many variants, it requires a lot of scaffolding to remain type-safe, which unless truly necessary can be counted as a bad thing, however, as mentioned, there are times it is necessary: for example, when having to use C-based libraries/APIs then you may conceivably need to use them.
In the main stay well clear of them and your life will be much easier.
Note: I mention the points above, as having gone from C to C++ I have had to face up to a lot of old tried and tested techniques from C which cause problems in C++.
来源:https://stackoverflow.com/questions/14626318/when-do-i-have-to-free-memory