c++技巧杂烩

对不希望对象被拷贝的类加宏使其失去能被拷贝的能力

class Foo {
 private:
  DISALLOW_EVIL_CONSTRUCTORS(Foo);
};

#define DISALLOW_EVIL_CONSTRUCTORS(TypeName) \
  TypeName(const TypeName&); \
  void operator=(const TypeName&)

不要inline virtual method

如何在constructor里处理failure

c++构造函数没有返回值,公司不允许使用exception。那怎么在constructor里面处理failure呢?

  • 方法一:类里有bool Init()函数,把可能失败的初始化操作放到Init()中。这样的问题是,使用方必须记得调Init,界面不友好。
  • 方法二:构造函数非public,搞static ClassName* Create()函数,初始化不成功返回NULL。问题是哪天有子类要继承这个类,子类也要这么搞,还是比较麻烦的,
    而且在C++里用起来很别扭
  • 方法三:在构造函数里,出错就直接abort(),可以用glog的LOG(FATAL)。看起来惩罚力度有点大

总结起来没有找到十全十美的方法,还是用方法三吧,可以保持C++的编程风格。

子类的构造函数参数个数基本上不能比父类少

class Super {
 public:
  explicit Super(int arg1);
};

class Sub {
 public:
  explicit Sub(int arg1)
    : Super(arg1) {}
};

因为在子类构造函数在进入函数体前就要先初始化一次父类,": Super(arg1)"这部分必不可少

posted @ 2014-11-27 00:20  bitcold  阅读(301)  评论(0)    收藏  举报