【发布时间】:2020-08-06 06:22:42
【问题描述】:
我不知道如何正确地拥有一个没有内存泄漏的派生类向量。我尝试了以下方法,但有问题:
#include <iostream>
#include <vector>
using namespace std;
struct base {};
struct derived : public base
{
derived() {}
};
struct Layer
{
vector<base*> effects;
Layer() {}
~Layer()
{
for(int ii = 0; ii < effects.size(); ii++)
{
cout << "called effect deleter" << endl;
delete effects[ii];
}
}
};
int main()
{
vector<Layer> layers;
for(int i = 0; i < 10; i++)
{
layers.push_back(Layer());
layers[i].effects.push_back(new derived());
cout << i << endl;
}
}
当我编译并运行这段代码时,我得到以下输出:
0
called effect deleter
1
called effect deleter
called effect deleter
我很困惑。为什么它只打印 0 和 1 而不是 0 到 9?如果我删除 Layer 析构函数,我会不会有内存泄漏?处理这种情况的正确方法是什么?
【问题讨论】:
-
Layer没有关注Rule of 3/5/0,因此当layers增加其容量并且必须复制现有Layer实例时,它可能会导致问题
标签: c++ c++11 vector memory-management c++-standard-library