为什么容器中的类是顺序析构的?
// copy_control.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include<vector>
using namespace std;
struct Exmpl {
Exmpl():val(cnt){ cout<<"Exmpl()"<<"val = "<<val<<endl;cnt++; }
Exmpl(const Exmpl& e)
{ val=e.val;cout<<"Exmpl(const Exmpl& e)"<<"val = "<<val<<endl;cnt++;}
Exmpl& operator=(const Exmpl& e){
cout<<"Exmpl& operator=(const Exmpl& e)"<<endl;
return *this;
}
~Exmpl(){cout<<"~Exmpl()"<<"val = "<<val<<endl;}
private:
int val;
static int cnt;
};
int Exmpl::cnt=1;
int _tmain(int argc, _TCHAR* argv[])
{
Exmpl *p=new Exmpl[3];
vector<Exmpl> Evec(p,p+3);
delete [] p;
return 0;
}
primer 413页说:容器中的元素总是按逆序撤销;首先撤销下标为size()-1的元素,然后是下标为size()-2的元素……直至最后撤销下标为0的元素。
为什么不一致呢? 类
[解决办法]
数组是这样的, vector等其他容器则没有要求。
[解决办法]
我认为顺序其实不重要,我们本就不该依赖两个对象的构造顺序和析构顺序。