小编MKR*_*sha的帖子

在std :: vector :: clear之后关于vector中的构造/破坏的困惑

#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++

6
推荐指数
3
解决办法
276
查看次数

标签 统计

c++ ×1