首页 > 解决方案 > unique_ptr 多态性内存泄漏

问题描述

我对智能指针很陌生,我在下面的代码中遇到了问题

#include <memory>
#include <vector>

using namespace std;

class A
{
public:
    int var;
};

class B : public A
{
public:
    vector<unique_ptr<int>> vec;
};

int main() 
{
    {
        unique_ptr<B> b(new B);
        b->vec.push_back(unique_ptr<int>(new int(4)));
        unique_ptr<A> a = unique_ptr<A>(move(b));
    }

    system("pause");

    return 0;
}

在这个例子中,当指针 a 超出范围时,添加到向量 vec 的 4 不会被删除,但是当我更改它以便它不会强制转换为基类时,所有资源都会按预期返回,我如何管理删除定义的变量在派生类中使用多态性和unique_ptr 时?

标签: c++inheritancememory-leakspolymorphismsmart-pointers

解决方案


推荐阅读