如果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的值,还是会导致某种内存泄漏?对不起,如果这是一个愚蠢的问题,但我似乎无法找到答案.
你的第一个例子肯定会泄漏.你的第二个例子可能会泄漏,比如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)
看,马,没有删除!