MFC经常会遇到创建画刷的句子
CBrush* pBrush = new CBrush(RGB(0,0,0));
CBrush* pOldBrush = dc.SelectObject(brush);
//做点事情
dc.SelectObject(pOldBrush);
delete pBrush;
delete dc.SelectObject(pOldBrush);//危险~!!
windows只创建一个Brush也就是说,如果定义了多个画刷他们是使用得同一块内存。所以这个操作很危险。 可以考虑用有引用技术的boost::shared_ptr来定义这个指针。
用到inline一定要非常小心,特别是在类的构造函数极其简单的时候,如:
Class Caution {
public:
Caution(){}
private:
string title;
int size;
};
这时候编译器会和我们一样选择这个构造函数为inline但是这是个很糟糕的现象,它会把变量的初始化全部放进去,所以导致效率反而下降了。
看Effective C++感觉其中的建议很好,赶紧记下来
成员变量最好都为private,protected其实是没有封装的
很欣赏其中的一句话,封装和怀孕很像,只有封装和不封装,而不存在半封装(protected)
既然要封装那就彻底一些,隐藏的东西越多,封装就越彻底,而可改变的空间就越大
MFC也不能过于依赖Class Wizard,比如说ON_COMMAND_RANGE和ON_UPDATE_COMMAND_UI_RANGE等这些RANGE宏Class Wizard里面都没有,这些在很多情况可以省去N多不必要的重复代码,而以select case代之。方便~~