#include <iostream>
#include <vector>
using namespace std;
class A {
public:
int a;
explicit A(int n = 0) : a(n) { cout << n << " created\n"; }
~A() { cout << a << " destroyed\n"; }
};
int main() {
vector<A> vectorA(5);
int n = 0;
for (auto &p: vectorA) {
p.a = n++;
}
vectorA.erase(vectorA.begin(), vectorA.begin() + 2);
return 0;
}
c++11,输出结果为:
疑问:
1.为什么 earse 前两个元素,析构的是后两个对象?
2.程序结束的时候,为什么a=3和a=4的对象又被析构了一次,a=0和a=1两个对象没有被析构?
这个和vector的释放策略有关,因为vector内部包装的是数组
初始化:
verctorA = [a=0,a=1,a=2,a=3,a=4]
删除区间[0,2): 对于数组来说 最好是从尾部删除元素 这样后面才能快速push 所以这里会发生对象拷贝
拷贝后:
verctorA = [a=2,a=3,a=4,a=3,a=4]
删除最后两个删除后:
verctorA = [a=2,a=3,a=4]