c++ - 如何保护具有非常量方法的全局对象

标签 c++

我需要在单线程应用程序中将我的 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/

相关文章:

c++ - 按下鼠标按钮时如何生成 QRect?

c++ - 堆栈或 BSS 或数据段上的数组最大大小

c++ - GCC 编译器是否可以处理任何其他大于 long long int 的数据类型?

c++ - 为什么我的程序在 windows 上读取文件比在 Ubuntu 上需要更长的时间

c++ - Windows 7 异常代码 : 0xc0000409

c++ - 带纹理的 DirectX Release 函数 (C++)

c++ - 向网站发送 http get 请求,忽略 c++ 的响应

c++ - 如何偏置随机数生成器

c++ - 如何知道类枚举的基础类型?

c++ - gcc "overflow in expression"而等效等效表达式工作正常