首页 > 解决方案 > 析构函数和向量

问题描述

我想了一会儿这个问题。当我试图在一些网站上找到答案时,我什么也没找到。所以问题是:如果我们有一个类向量并且我们使用类的析构函数,它会清除他在向量中的位置还是我们需要自己擦除它?

class MyClass{
  ...
};

std::vector<MyClass> myClasses(2);
myClasses[0].~MyClass();

标签: c++oop

解决方案


您不应该手动调用析构函数。当你调用std::vector::erase时,对象的析构函数将被自动调用,正如@HolyBlackCat 评论的那样。

通过手动调用析构函数,你最终会被调用两次,这是不好的,所以请记住:

解决方案是永远不要手动调用你的析构函数。

只需致电:

myClasses.erase(myClasses.begin() + 0);

这将删除向量的第一个对象,从而自动调用其析构函数。


推荐阅读