从列表C ++向量中删除元素

时间:2014-10-22 01:52:07

标签: c++ list vector stdlist

我有一个类,它有一个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? 

1 个答案:

答案 0 :(得分:2)

std::vector遵循RAII原则,该原则确保调用对象的析构函数,并在对象超出范围后从内存中删除对象。

特别针对您的问题:

如果我从向量中删除了一个元素,是否会在已删除的实例上调用类析构函数?

我是否必须在析构函数中使用list :: clear()明确清除我的列表?

请注意: RAII不会使用指针执行任何。因此,它不会取消引用指针,也不会在取消引用的对象上调用析构函数,也不会从内存中删除取消引用的对象。