在我的应用程序中,我正在创建并返回一个数组,其中填充了来自派生类的动态分配的对象,如下所示:
void someGetter(std:vector<DerivedClass> & returnV)
{
BaseClass* base = object->clone(); // "object" is a "unique_ptr<BaseClass>"
DerivedClass* derived = dynamic_cast<DerivedClass*> (base);
if (derived != nullptr)
{
returnV.push_back(*derived);
}
else
{
delete base;
}
}
这显然会造成内存泄漏(valgrinds 在这里帮助我),因为派生的永远不会被删除。
我试图像这样释放分配的内存:
delete &returnV[0];
它没有给出任何编译错误/警告,代码仍然运行良好。但是 valgrind 在该行代码上报告了一些额外的错误(无效读取,无效免费),并且泄漏仍然存在。
有没有办法释放这样返回的内存?或者我应该返回 unique_ptr 而不是对象?