我已经看到构造函数,复制构造函数,析构函数和赋值运算符保存在典型的单一类中的私有范围内.例如
class CMySingleton
{
public:
static CMySingleton& Instance()
{
static CMySingleton singleton;
return singleton;
}
private:
CMySingleton() {} // Private constructor
~CMySingleton() {}
CMySingleton(const CMySingleton&); // Prevent copy-construction
CMySingleton& operator=(const CMySingleton&); // Prevent assignment
};
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是
为什么要将析构函数和赋值运算符保留在私有范围内呢?这是强制性的吗?
公共析构函数是否会破坏单例类的任何属性?因为我们的对象构造受到限制所以不会有不必要的破坏.
我可以理解私有赋值运算符可以阻止自我赋值,但是除了额外的运行时间之外,公共赋值运算符是否还会受到伤害?
使析构函数私有可能会阻止某人尝试调用delete
指向单例的指针.
auto& singleton = CMySingleton::Instance();
auto pointer_to_singleton = &singleton;
delete pointer_to_singleton; // Bad!
Run Code Online (Sandbox Code Playgroud)
禁用赋值运算符可以防止无害但无意义的自我赋值.看到这个答案.如果有人这样做,很可能,这是一个错误,所以你不妨这样做.