c++ - 析构函数和向量
问题描述
我想了一会儿这个问题。当我试图在一些网站上找到答案时,我什么也没找到。所以问题是:如果我们有一个类向量并且我们使用类的析构函数,它会清除他在向量中的位置还是我们需要自己擦除它?
class MyClass{
...
};
std::vector<MyClass> myClasses(2);
myClasses[0].~MyClass();
解决方案
您不应该手动调用析构函数。当你调用std::vector::erase
时,对象的析构函数将被自动调用,正如@HolyBlackCat 评论的那样。
通过手动调用析构函数,你最终会被调用两次,这是不好的,所以请记住:
解决方案是永远不要手动调用你的析构函数。
只需致电:
myClasses.erase(myClasses.begin() + 0);
这将删除向量的第一个对象,从而自动调用其析构函数。
推荐阅读
- reactjs - React + Flask-Socket.io:关闭浏览器时来自客户端的套接字断开事件延迟?
- c - 我需要一个解释:从不兼容的指针类型传递 'sscanf' 的参数 1
- javascript - 在 VS Code 中运行隔离的 JavaScript 命令(不是当前文件)
- android - 在单个活动应用程序中在片段之间进行通信并用新片段替换片段的正确方法
- javascript - 如何用js中的单个字符替换单个数字和两位数字?
- json - 在使用 try/catch 块时捕获“Test-Json”失败的原因
- javascript - 控制嵌套 React 元素的事件
- node.js - 禁用公共后如何实现 Viber Chatbot
- java - java流一个自定义类
- locust - 蝗虫工人没有连接到主人