我正在用C++开发一个库,用户/程序员将在其中扩展具有方法BaseClass
的类initArray
。此方法应由用户/程序员实现,并且通常应初始化m_arr
数组的所有元素。
这是一个片段,已对此示例进行了修改:
class BaseClass {
public:
BaseClass(int n) {
m_arr = new double[n];
size = n;
};
virtual ~BaseClass();
int size;
double* m_arr;
virtual int initArray();
};
有时,用户/程序员实现的
initArray
不会初始化m_arr的某些元素。我想在我的库中创建一个函数,以检查initArray
是否初始化了m_arr
的所有元素。此功能应由运行时上的健全性检查例程调用。我的问题:是否有可能检测到此阵列的变化?我只能考虑使用一些无效值(例如NaN或Inf)初始化数组,调用
initArray
并检查所有值是否已更改。谢谢你的想法
大卫
编辑
这是我尝试检测的客户端代码的示例:
// .h:
class MyExample : public BaseClass {
public:
MyExample();
virtual ~MyExample();
virtual int initArray();
};
// .cpp:
MyExample::MyExample() : BaseClass(3) { }
MyExample::~MyExample() { }
int MyExample::initArray() {
m_arr[0] = 10;
//m_arr[1] = 11; // let's say someone forgot this line
m_arr[2] = 12;
return 0;
}
因此,通过忘记
m_arr[1]
,此元素未初始化,并且可能在以后的计算中引起问题。这就是我要检查的内容。 最佳答案
我没有看到在C++中实现此目的的直接方法。您打算实现的是Ruby on Rails中的过滤器,在访问任何方法之前,都将调用过滤器。
另外,您可以将数组包装在结构内,并在该结构内重载[]运算符以进行分配和访问。
现在 :
1)在用于分配的重载[]运算符内,维护一个计数器并为每次初始化增加该计数器。
2)在重载的[]访问运算符内,如果数组内容等于元素总数,则在访问数组内容之前检查计数器。如果不是,则抛出错误。
希望这可以帮助。
关于c++ - 在C/C++中运行时检测变量的修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2408523/