Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从列表C+的向量中删除元素+;_C++_List_Vector_Stdlist - Fatal编程技术网

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

C++ 从列表C+的向量中删除元素+;,c++,list,vector,stdlist,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> m

我有一个类,它的成员变量是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? 
class my\u class{
字符串类名称;
列出我的清单;
公众:
我的班级();
~my_class();//析构函数
};
向量my_vec;
my_类obj1、obj2、obj3;
我的车辆向后推(obj1);
我的车辆向后推(obj2);
我的向量向后推(obj3);
my_vec.erase(my_vec.begin()+2)//这是否足够?

std::vector
遵循这样的原则,即确保在对象超出范围时调用对象的析构函数,并从内存中删除对象

针对您的问题:

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

是否必须使用析构函数中的list::clear()显式清除列表?

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

答案如下:好的,听起来像是,共享指针的计数器将递减。