#include <iostream>
#include <vector>
class A
{
public:
A() { std::cout << "constructor" << std::endl; }
~A() { std::cout << "destructor" << std::endl; }
};
int main()
{
std::vector<A> myvec;
myvec.push_back(A());
myvec.push_back(A());
myvec.clear();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
constructor
destructor
constructor
destructor
destructor
destructor
destructor
Run Code Online (Sandbox Code Playgroud)
这里有五个对析构函数的调用.前两个是由于临时传递给push_back.还有其他三个电话,但我预计会有两个额外的电话.
myvec.clear()将只清除两个内容,因此析构函数A应该只调用两次(而不是三次).为什么有一个额外的时间析构函数被调用?
但是,如果我只将一个元素推送到向量而不是两个,那么输出就像我预期的那样.
c++ ×1