我有一个相当简单的问题,但无法解决。
考虑我有这个代码:
#include <iostream>
#include <vector>
using namespace std;
class B
{
public:
B(const int& val) {this->val = val;}
int val;
};
class A
{
public:
A() {}
void Set(B& ptb)
{
ptBs.push_back(&ptb);
}
void Set(const int& val)
{
ptBs.push_back(new B(val));
}
std::vector<B*> ptBs;
};
int main()
{
A* ptA = new A();
ptA->Set(B(10));
ptA->Set(38);
for (int i=0; i<ptA->ptBs.size(); i++)
cout << ptA->ptBs[i]->val << endl;
delete ptA;
system("pause");
return 0;
}
输出结果为:
10
38
但是我认为void Set(const int& val)
如果我不使用此方法创建的数组元素调用 delete,就会发生内存泄漏。
我怎么说,std::vector 的哪些元素是在堆上创建的,所以我可以像这样在 ~A() 析构函数中释放内存:
~A()
{
for (int i=0; i<ptBs.size(); i++)
delete ptBs[i];
}
我是否必须删除通过临时新操作调用创建的矢量元素?
可能我在这里没有看到非常简单的东西,但我的应用程序中确实需要这个功能。
PS。10 和 38 只是一个简单的例子。Set
函数可以用不同的参数调用数千次。