以下代码导致内存泄漏:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class base
{
void virtual initialize_vector() = 0;
};
class derived : public base
{
private:
vector<int> vec;
public:
derived()
{
initialize_vector();
}
void initialize_vector()
{
for (int i = 0; i < 1000000; i++)
{
vec.push_back(i);
}
}
};
int main()
{
for (int i = 0; i < 100000; i++)
{
unique_ptr<base> pt = make_unique<derived>();
}
}
这对我来说没有多大意义,因为派生的类不会分配任何原始动态内存,而unique_ptr会自行分配。我得到的是,该类的隐式析构函数被调用,而不是派生的,但我不明白为什么这是一个问题。如果要为派生编写显式析构函数,则不会为vec编写任何内容。
~derived()
委派给vec的析构函数的方法。另外,假设您unique_ptr<base> pt
知道派生的析构函数。没有虚拟方法,情况就不会如此。尽管可以给unique_ptr一个删除函数,它是一个模板参数,没有任何运行时表示,并且该功能对该代码无用。