我有几个类除了在它们的构造函数/析构函数中什么都不做.这是一个例子
class BusyCursor { private: Cursor oldCursor_; public: BusyCursor() { oldCursor_ = CurrentCursor(); SetCursor(BUSY_CURSOR); } ~BusyCursor() { SetCursor(oldCursor_); } } // example of use void DoSlowThing { BusyCursor busy; ... do something time-consuming ... }
我有点担心未来的可读性.我在这里过于"狡猾",有一个从未在代码中实际使用的变量("忙")吗?一些静态分析工具是否可以建议将它们删除,或者这个成语是否足够常见而不用担心?
这种技术非常普遍,被称为设计模式:资源获取是初始化(RAII).
我会毫不犹豫地使用这种设计模式.
使用这种设计模式进行编码要好得多,因为忘记重置光标或任何有问题的资源都可以避免错误.
如果你担心其他程序员可能不理解它,那么那些程序员应该受到更多的教育.始终努力以最无错误的方式进行编码,使您和其他人无法在脚下拍摄自己/自己.
"一些静态分析工具是否可以建议删除它们?"
没有静态分析工具会将此视为一个问题.
不会给出编译器警告
没有编译器优化会导致任何问题.
原因是因为创建了对象并且调用了构造函数/析构函数.所以它不是一个未引用的变量.
正如其他人所说,这是很好的C++风格.为了提高可读性,我总是将这些仅限RAII的类添加到Scoped
(例如ScopedBusyCursor
)的前面,以便一目了然地了解该类的用途.
这是一个众所周知的好C++习语,就像其他人一样回答.
为了清楚地表明这些类只是在一个范围内使用而不是在不同的范围之间移动,最好使它们不可复制.这可以通过添加未实现的私有拷贝构造函数和拷贝赋值运算符来手动完成.更简单,更易读的方法是从boost :: noncopyable派生类:
#includeclass BusyCursor : public boost::noncopyable // for scoped use only { // ... };