c++ - 好的或坏的 C++ 习语 - 对象纯粹用于构造函数/析构函数?

标签 c++ idioms raii

我有几个类除了在它们的构造函数/析构函数中什么都不做。这是一个例子

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  ...
    }

我有点担心 future 的可读性。我在这里是不是太“狡猾”了,变量(“忙”)从未在代码中实际使用过?某些静态分析工具是否会建议将它们删除,或者这个习语是否足够普遍而无需担心?

最佳答案

这种技术非常普遍,被称为设计模式:Resource Acquisition Is Initialization (RAII) .

我会毫不犹豫地使用这种设计模式。

最好使用这种设计模式进行编码,因为您可以通过忘记重置光标或任何有问题的资源来避免错误。

如果你担心其他程序员可能不理解它,那么那些程序员应该接受更多的教育。始终努力以最无错误的方式编写代码,这样您和其他人就不可能搬起石头砸自己的脚。


“一些静态分析工具可以建议将它们删除吗?”

  • 任何静态分析工具都不会将此视为问题。
  • 不会给出编译警告
  • 任何编译器优化都不会导致任何问题。

原因是因为创建了对象,调用了构造函数/析构函数。所以它不是一个未引用的变量。

关于c++ - 好的或坏的 C++ 习语 - 对象纯粹用于构造函数/析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435322/

相关文章:

c++ - 构造函数被调用两次

c++ - 使用 C++ 从 .OBJ 文件中读取和存储值

ruby - 编写一个 ruby​​ 命令行应用程序;最好的方法是做到这一点?

c++ - 如何在函数导出上运行清理代码?

language-agnostic - 为什么 RAII 和垃圾收集是互斥的?

c++ - 当 RAII 对象构造失败时

c++ - 如何为 libsvm 创建训练数据(作为 svm_node 结构)

c++ - 如何在 C++ 中将字符串转换为模板化类型

ruby 在哪里定义结构

c++ - 如何在 C++ 中实现生成器?