2

我在 C++ 中有一个静态类,即这个类的所有成员都是静态的。

因为我不希望类被实例化,所以我将构造函数设为私有。我没有为这个类定义一个默认的复制赋值运算符或复制构造函数,因为它永远不能被实例化。但是,我的静态代码分析器告诉我:

如果因为类管理资源而声明了析构函数,出于同样的原因,您可能还需要声明复制构造函数和复制赋值运算符。

-> 如果我不为这个类定义析构函数可以吗?既然它永远不能被创造,它也不能被摧毁,我想?

-> 这是一个好习惯吗?我的设计有什么问题吗?

4

1 回答 1

5

因为我不希望类被实例化,所以我将构造函数设为私有。

如果您可以访问 C++11 编译器,那么您有一个更好的选择:您可以显式删除编译器提供的“无偿”构造函数。这应该解决析构函数的问题,因为编译器会知道不可能构造你的类。

如果您不能使用已删除的构造函数功能,则将构造函数声明为私有应该足以防止外部实例化。析构函数不是必需的,因为没有什么可破坏的。

这是一个好习惯吗?我的设计有什么问题吗?

这种做法在无法定义独立函数/变量的语言中更为常见。另一方面,C++ 提供独立的函数和变量。这两个特性与命名空间的结合使得只有静态成员的类变得不必要:这样的类在功能上等同于命名空间,但对 C++ 来说不是惯用的。

于 2013-02-05T01:59:09.973 回答