Memory Management in C++

Started by
4 comments, last by Silvo 18 years ago
I've got a question. In C++, if I decide I do not need a variable anymore, how do I remove it? EG:

int personAge;

std::cout << "Enter your age: ";
std::cin >> personAge;
std::cout << "Your name is " << personAge;

ok, not the best example, but in this, I have no further need of personAge. I suppose I could resuse it: EG:

int personAge;

std::cout << "\nEnter your age: ";
std::cin >> personAge;
std::cout << "\nYour name is " << personAge;

std::cout << "\nEnter your phone number: ";
std::cin >> personAge;   // personAge == phoneNumber?!?!
std::cout << "\nYour phone number is " << personAge;

See? doesn't seem practical. I could wait for it to go out of scope... EG:

int happyFunc()
{
   int cool;
   cool = 38;
   std::cout << "\nThe number " << cool << " is really cool!";
   std::cout << "\nAlso, I don't need \"cool\" anymore!";
}

OK for short functions, but what if it's main(), or if the function is really big?? back to my first example:

int happy;

std::cout << "On a scale of 1 - 10, how happy are you?\nHappiness factor: ";
std::cin >> happy;
std::cout << "\nYour happiness factor is " << happy << "\10";
//'happy' is now redundant.

std::cout << "\n\nblah blah blah...";

How to destroy 'happy'?
Advertisement
If you explicitly allocate memory with new or malloc, you need to free it with delete or free (anything newed must be deleted and anything malloced must be freed). If you don't use new or malloc the variable will be destroyed when it goes out of scope. So in your example the personAge variable would be destroyed when you return from the function it is defined in you can't explicitly deallocate the memory it's using nor should you need to.
You can use the scope to do that:

{  int happy;  std::cout << "On a scale of 1 - 10, how happy are you?\nHappiness factor: ";  std::cin >> happy;  std::cout << "\nYour happiness factor is " << happy << "\10";  //'happy' is now redundant.}std::cout << "\n\nblah blah blah...";

It doesn't even need a function body, just the brackets.
If you are going to explicitly create a scope like that then you might as place it in a well named function.

void CalculateHappyness(){  int happy;  std::cout << "On a scale of 1 - 10, how happy are you?\nHappiness factor: ";  std::cin >> happy;  std::cout << "\nYour happiness factor is " << happy << "\10";}void CalculateAge(){  int personAge;  std::cout << "\nEnter your age: ";  std::cin >> personAge;  std::cout << "\nYour name is " << personAge;}void CalculatePhoneNumber(){  int PhoneNumber;  std::cout << "\nEnter your phone number: ";  std::cin >> PhoneNumber;   std::cout << "\nYour phone number is " << PhoneNumber;}int main(){  CalculateHappyness();  CalculateAge();  CalculatePhoneNumber();}


But remember, an int is just 4 bytes, nothing compared to your 2 gigs or RAM. Don't worry about it.
Thanks Monder, mldaalder and Anonymous Poster 1 and 2 (or is it just 1?). Yes, I realise ints are very small, but what if i just need a temporary object (which could be very, very big) for a small section, but it remains in scope for a long time. The scoping trick {...} is a great idea, thanks. It just seems a little odd that you can't explicedly delete a variable (pointers excluded). Anywho, thanks for the info!

This topic is closed to new replies.

Advertisement