我有一个包含vector成员变量的类。 我知道存储在堆栈中的向量将是 当他们离开时清理(即没有内存) 范围,但我不确定是否破坏了 class对象 - 包含vector成员变量 - 被认为超出了范围。
如果不是,那么破坏的适当方法是什么 向量?
EG:
class fred {
char *stuff;
vector<int> v;
fred() : stuff(), v() {}
~fred() {
if (stuff) free(stuff);
// now how do I clear up the vector v? Will it be done automatically?
}
}
答案 0 :(得分:6)
已经为您清理了矢量!当一个类被破坏时,它的所有成员析构函数也被调用。在这种情况下,调用v
的析构函数,它会清除它分配的内容。
当你按照它们被声明的相反顺序到达析构函数的结束}
时,将调用非静态成员的dtors。然后调用你的基类析构函数(如果存在)。
答案 1 :(得分:0)
当您销毁fred的实例时,将调用向量的析构函数。
答案 2 :(得分:0)
我认为你不需要为矢量调用DTOR。一旦对象超出范围,就会调用DTOR,这意味着fred的DTOR被调用。
答案 3 :(得分:0)
永远只有一种方法来摧毁一个物体,那就是它的析构函数(相反,你可以用几种方式构造物体)。 STL容器专门设计用于避免数据结构内的这种微观内存管理。如果您必须在STL容器中显式分配或释放内存,那么您做错了。