我正在用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/

10-10 21:21