多个新的和一个删除

1 c++ polymorphism dynamic

如果DerivedClass1和DerivedClass2是从BaseClass派生的类,其中BaseClass是一个多态类,这两个代码片段中的哪一个是正确的?

BaseClass *ptr;

ptr = new DerivedClass1;
ptr->PrintName();

ptr = new DerivedClass2;
ptr->PrintName();

delete ptr;
Run Code Online (Sandbox Code Playgroud)

要么

BaseClass *ptr;

ptr = new DerivedClass1;
ptr->PrintName();

delete ptr;

ptr = new DerivedClass2;
ptr->PrintName();

delete ptr;
Run Code Online (Sandbox Code Playgroud)

在使用'delete'之前多次使用'new'只是重新定义ptr的值,还是会导致某种内存泄漏?对不起,如果这是一个愚蠢的问题,但我似乎无法找到答案.

Fre*_*son 5

你的第一个例子肯定会泄漏.你的第二个例子可能会泄漏,比如PrintName()抛出异常.

更好的想法是使用智能指针,例如std::unique_ptr:

std::unique_ptr<BaseClass> ptr;

ptr.reset(new DerivedClass1);
ptr->PrintName();

ptr.reset(new DerivedClass2);
ptr->PrintName();
Run Code Online (Sandbox Code Playgroud)

看,马,没有删除!