作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的类(class)
#include <iostream>
#include <vector>
class Base
{
public:
Base (int ind = 3)
:m_ind(ind)
{
std::cout<<"Base ()"<<std::endl;
}
virtual ~Base ()
{
std::cout<<"~Base ()"<<std::endl;
}
};
我在 main 中尝试了这段代码:
Base(6)//literal base
“Base ()”
"~Base ()"
我尝试在主程序中运行这段代码:
std::vector<Base>vec;
vec.push_back(Base(4));
我的预期是:
Base(4)
并将其存储在 vec.at(0)
"Base ()"
“~Base ()”
打印在屏幕上我得到的:
Base(4)
并将其存储在 vec.at(0)
"Base ()"
打印“~Base()”
"~Base ()"
这意味着 Base(4)
被插入 vector 时被删除,但是如果 vec.at(0)
是 Base(它在 vector 并且没有被删除)
最佳答案
当你做的时候
vec.push_back(Base(4));
您创建了一个临时对象。这个临时对象被传递给 push_back
函数,该函数将其复制或移动到 vector 中(调用复制构造函数或者在你的类中移动构造函数)。然后 push_back
函数返回并销毁临时对象。
稍后当 vector 本身被销毁时,vector 中的拷贝将被销毁。
关于c++ - vector 、类和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246820/
我是一名优秀的程序员,十分优秀!