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

      一个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;
};

posted on 2009-03-31 10:33 小虫虫 阅读(627) 评论(2)  编辑 收藏 引用

评论

# re: 关于初始化列表的初始化顺序 2009-03-31 12:17 func

改成:
Vector(unsigned n=8):_size(n),_data(new T[n]){}
不是更妥当一些?  回复  更多评论   

# re: 关于初始化列表的初始化顺序 2009-04-07 15:00 小虫虫

@func
呵呵,不错的主意,谢谢  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜