简述 当 push_back、insert、reserve、resize 等函数导致内存重分配时,或当 insert、erase 导致元素位置移动时,vector 会试图把元素“移动”到新的内存区域。vector 通常保证强异常安全性,如果元素类型没有提供一个保证不抛异常的移动构造函数,vector 通常会使用拷贝构造函数。 demo // // main.cpp // // Created by wz on 2020/12/27. // #include <iostream> #include <vector> using namespace std; class A { public: A() { cout << "A()\n"; } A(const A&) { cout << "A(const A&)\n"; } A(A&&) { cout << "A(A&&)\n"; } }; class B { public: B() { cout << "B()\n"; } B(const B&) { cout << "B(const B&)\n"; } B(B&&) noexcept // A B差别在这里 { cout << "B(B&&)\n"; } }; int main() { { vector<A> v1; v1.emplace_back(); v1.emplace_back(); v1.emplace_back(); } cout << "*************************" << endl; { vector<B> v2; v2.emplace_back(); v2.emplace_back(); v2.emplace_back(); } return 0; } 结果 A() A() A(const A&) A() A(const A&) A(const A&) ************************* B() B() B(B&&) B() B(B&&) B(B&&)