If DerivedClass1 and DerivedClass2 are classes derived from BaseClass, where BaseClass is a polymorphic class, which of these two code snippets are correct?
BaseClass *ptr;
ptr = new DerivedClass1;
ptr->PrintName();
ptr = new DerivedClass2;
ptr->PrintName();
delete ptr;
or
BaseClass *ptr;
ptr = new DerivedClass1;
ptr->PrintName();
delete ptr;
ptr = new DerivedClass2;
ptr->PrintName();
delete ptr;
Does using ‘new’ multiple times before using ‘delete’ simply redefine ptr’s value, or does it cause some kind of memory leak? Excuse me if this is a stupid question, but I couldn’t seem to find an answer to it.
Your first example will certainly leak. Your second example could leak, say if
PrintName()threw an exception.A better idea is to use a smart pointer, such as
std::unique_ptr:Look, Ma, no delete!