2012-11-30 48 views
4

我创建的unique_ptr的两个标准载体:STL向量的Unique_ptr - 如何重置?

std::vector<std::unique_ptr<Student>> students; 
std::vector<std::unique_ptr<Teacher>> teachers; 

然后,我创建了一个新对象,并把它的向量:

students.push_back(std::unique_ptr<Student> (new Student())); 
teachers.push_back(std::unique_ptr<Teacher> (new Teacher())); 

所有我需要做的手术后,我怎么能删除矢量?

Whitout的unique_ptr我不得不做一个循环,并删除每个对象:具有的unique_ptr

while (!students.empty()) 
{ 
    delete students.back(); 
    students.pop_back(); 
} 

现在我有什么做的?我知道我不得不使用unique_ptr :: reset(我认为)。

回答

13

很简单:

students.clear(); 

这就是智能指针(如unique_ptr)是 - 他们采取销毁对象的护理指出,在适当的时候。

+0

所以基本上,当我调用clear()时,所有的对象都被删除了? – LppEdd

+1

@ user1860848是的,确切地说。当你调用clear()时,vector中的对象('unique_ptr's)被删除。当'unique_ptr'被删除时,它删除它指向的对象。 – Angew

+0

是否正确写入:std :: vector >学生; ?只是好奇心。 – LppEdd