在C/C++中检测运行时变量的修改

Yup*_*ing 5 c c++ memory

我正在用C++开发一个库,其中users/programmer将扩展一个BaseClass具有方法的类initArray.这个方法应该由用户/程序员实现,它通常应该初始化数组的所有元素m_arr.

这是一个snipplet,修改为这个例子:

class BaseClass {
     public:

     BaseClass(int n) {
         m_arr = new double[n]; 
         size = n;
     };
     virtual ~BaseClass();

     int size;
     double* m_arr;

     virtual int initArray();
};
Run Code Online (Sandbox Code Playgroud)

有时,用户/程序员实现了一个initArray不初始化m_arr的某些元素的东西.我想要的是在我的库中创建一个函数来检查是否initArray初始化了所有元素m_arr.该函数应在运行时由健全性检查rutine调用.

我的问题:是否有可能检测到此阵列的变化?我只能想到用一些无效值(如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;
}
Run Code Online (Sandbox Code Playgroud)

因此,通过忘记m_arr[1]此元素未初始化并可能在将来的计算中导致问题.这就是我想要检查的内容.

小智 5

为什么不使用std :: vector?然后最终用户将使用push_back添加到它,您可以检查大小以查看添加了多少项.


muk*_*mar 3

我没有看到在 C++ 中执行此操作的直接方法。您打算在 Ruby on Rails 中实现过滤器,在访问任何方法之前,都会调用过滤器。

或者,您可以将数组包装在一个结构内,并在该结构内重载 [] 运算符以进行赋值和访问。

现在 :

1) 在用于赋值的重载 [] 运算符内,维护一个计数器并为每次初始化递增计数器。

2) 在重载的 [] 访问运算符内,在访问数组内容之前检查计数器是否等于元素总数。如果没有,则抛出错误。

希望这可以帮助。