【发布时间】:2011-03-26 12:03:24
【问题描述】:
如果一个向量被放入栈中,它会在其自动变量作用域结束时被自动销毁。
如果我在一个类中放置了一个向量怎么办?
class A
{
vector<B> bs; // B is POD struct.
};
我应该手动清理它吗?如果是,我该怎么办?
【问题讨论】:
标签: c++ memory-management vector raii
如果一个向量被放入栈中,它会在其自动变量作用域结束时被自动销毁。
如果我在一个类中放置了一个向量怎么办?
class A
{
vector<B> bs; // B is POD struct.
};
我应该手动清理它吗?如果是,我该怎么办?
【问题讨论】:
标签: c++ memory-management vector raii
当封闭类的析构函数(即A的析构函数)将被调用时,该向量bs将被销毁。
void f()
{
{
A a;
//working with a;
}//<--- here a goes out of scope, so it's destructor is called;
//so not only a is destructed but also a.bs
}
【讨论】:
vector<B> bs 其中 B 不是指针类型就没有关系。一切都会自动销毁。但是,如果您声明vector<B*> bs,并使用new 创建的元素填充它,那么您必须编写析构函数或其他方式来手动销毁bs(即所有元素)。底线是:如果您使用new,那么您必须在代码中的某处使用delete 对应的new。具体在哪里取决于您的课程设计和实际场景!
确保您在向量中使用的每个 B 类在析构函数中删除自己分配的空间,因此当向量超出范围时,您不会出现内存泄漏
【讨论】: