我需要在单线程应用程序中将我的 Params 类的实例公开为全局对象。
作为一项安全措施,我想防止客户端代码无意中覆盖对象本身。但是,我不能使用 const 限定符(如下例所示),因为某些类方法是非常量。
这个类可能会在代码的其他部分重新实例化,所以我想避免改变它的内部结构来适应这种特殊需要,例如通过使用单例设计模式或将可变限定符应用于某些数据成员。
我能想到的唯一解决方案是一个简单的包装类,其单个数据成员是一个可变的 Params 对象,但对于这样一个简单的需求,这似乎是一个糟糕的解决方案。
我不熟悉 C++ 的最新进展,所以也许有人可以想出一个更优雅的解决方案。
// params.h
class Params
{
..
};
extern const Params params;
// params.cpp
#include "params.h"
const Params params; // no good because class has mutable methods
最佳答案
如果您想要一个不能被覆盖的可变对象,您可以将类的 operator=
设为私有(private)/ protected 。
关于c++ - 如何保护具有非常量方法的全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543423/