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)"这部分必不可少

浙公网安备 33010602011771号