我试图理解为 std::vector emplace_back (or) push_back compiler explorer .
std::vector
emplace_back (or) push_back
注:优化级别为0,即使用-O0
我不明白的一点是,为什么要调用两个析构函数而不是一个(因为你可以看到只创建了一个向量)。如果我假设一个临时对象是在内部创建的,那么至少我必须看到对 标准::向量 建造师。
标准::向量
这与clang编译器也是一样的。
有人能解释一下这里发生了什么事吗?
编辑1:
#include <vector> int main() { std::vector<int> vec; vec.emplace_back(10); }
编辑2:
在第34行有一条线索: call _Unwind_Resume . 从第28行到第34行的代码块用于在抛出异常时展开堆栈。正常代码路径在第25行通过析构函数调用,然后在第27行跳过异常代码,跳到第35行,然后从那里返回函数。
call _Unwind_Resume
澄清一下,这里有一种魔力:召唤 _Unwind_Resume
_Unwind_Resume