Alex Rivera | Logout

If I delete a class, are its member variables automatically deleted?

Asked 2011-06-06T18:38:10.163
33

I have been researching, and nothing relevant has come up, so I came here.

I am trying to avoid memory leaks, so I am wondering:

Say I have class MyClass with member ints a and b, and an int array c, which are filled in a member function:

class MyClass
{
    public:
        int a, b;
        int c[2];
        void setVariables() 
        {
            a, b = 0;
            for (int i = 0; i < 2; i++) 
            {
                c[i] = 3;
            }
        }
};
int main(int argc, char* argv[])
{
    MyClass* mc = new MyClass();
    mc->setVariables();
    delete mc;
} 

Now, after I call delete mc, will a, b, and all the contents of c be deleted as well? Or will I have to do that explicitly in the destructor of MyClass?

Edit
Report

2 Answers

37

When delete mc is executed, the compiler calls the destructor of the object (MyClass::~MyClass()) and then deallocates the memory associated with it.

The default destructor (when you don't declare your own) calls the destructors of all member variables, in order from last to first by declaration (that is, in this case, c, then b, then a). Since those members in this example are POD types (they do not have a destructor), no work is done.

answered 2011-06-06T18:43:19.210
1

Your three variables were not allocated with new so there would be no need to delete them at all.

They would be destructed when your class is deleted (as they were allocated when your class was newd), but that's not the same as being deleted.

answered 2011-06-06T18:44:10.950

Your Answer