【发布时间】:2010-03-09 11:10:59
【问题描述】:
我正在用 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],此元素不会被初始化,可能会导致未来计算出现问题。这就是我想检查的内容。
【问题讨论】:
-
当然,将 m_arr 设为私有并提供访问器。