设为首页 加入收藏

TOP

effectiveC++(十二)(一)
2010-12-26 23:08:03 】 浏览:5711
Tags:effectiveC 十二

条款12: 尽量使用初始化而不要在构造函数里赋值

 

看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。

template<class t>
class namedptr {
public:
  namedptr(const string& initname, t *initptr);
  ...

private:
  string name;
  t *ptr;
};

(因为有指针成员的对象在进行拷贝和赋值操作时可能会引起指针混乱(见条款11),namedptr也必须实现这些函数(见条款2))

在写namedptr构造函数时,必须将参数值传给相应的数据成员。有两种方法来实现。第一种方法是使用成员初始化列表:

template<class t>
namedptr<t>::namedptr(const string& initname, t *initptr  )
: name(initname), ptr(initptr)
{}

第二种方法是在构造函数体内赋值:

template<class t>
namedptr<t>::namedptr(const string& initname, t *initptr)
{
  name = initname;
  ptr = initptr;
}

两种方法有重大的不同。

从纯实际应用的角度来看,有些情况下必须用初始化。特别是const和引用数据成员只能用初始化,不能被赋值。所以,如果想让namedptr<t>对象不能改变它的名字或指针成员,就必须遵循条款21的建议声明成员为const:

template<class t>
class namedptr {
public:
  namedptr(const string& initname, t *initptr);
  ...

private:
  const string name;
  t * const ptr;
};

这个类的定义要求使用一个成员初始化列表,因为const成员只能被初始化,不能被赋值。

如果namedptr<t>

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇effectiveC++(十三) 下一篇effectiveC++(十一)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目