关于初始化列表的初始化顺序

关于初始化列表的初始化顺序

      一个Vector模板类,开始的时候是这样写的:
template <class T>
class Vector
{
public:
    Vector(unsigned n=8):_size(n),_data(new T[_size]){}
   //.........
protected:
    T*       _data;
    unsigned _size;
};
结果一运行,机子就慢了,打开任务管理器,占内存超大。后来想起来初始化列表是按照成员变量的声明顺序初始化的,所以在构造函数里_data数组先被初始化,这时_size没被初始化,即_size还是个随机值,估计随机的很大,呵呵,比方说_size为1234567,于是就申请了1234567的内存。。。。
于是修改如下就OK了:
template <class T>
class Vector
{
public:
    Vector(unsigned n=8):_size(n),_data(new T[_size]){}
   //.........
protected:
    unsigned _size;//先声明_size,先初始化它
    T*       _data;
};

你可能感兴趣的:(关于初始化列表的初始化顺序)