我有一个类,它有一个std :: list作为成员变量。我也有这些类的向量。如果我从向量中删除一个元素,是否会在已删除的实例上调用类析构函数?我是否必须在析构函数中使用list :: clear()明确清除我的列表?
class my_class {
string class_name;
list<int> my_list;
public:
my_class();
~my_class(); // destructor
};
vector<my_class> my_vec;
my_class obj1, obj2, obj3;
my_vec.push_back(obj1);
my_vec.push_back(obj2);
my_vec.push_back(obj3);
my_vec.erase(my_vec.begin()+2); //Is this sufficient?
答案 0 :(得分:2)
std::vector
遵循RAII原则,该原则确保调用对象的析构函数,并在对象超出范围后从内存中删除对象。
特别针对您的问题:
如果我从向量中删除了一个元素,是否会在已删除的实例上调用类析构函数?是
我是否必须在析构函数中使用list :: clear()明确清除我的列表?否
请注意: RAII不会使用指针执行任何。因此,它不会取消引用指针,也不会在取消引用的对象上调用析构函数,也不会从内存中删除取消引用的对象。