在使用"客户端数据校验器"中提到的通用类时发现存在2个bug.
代码在validator.cpp中.
测试时发现可以输入汉字
int CValidatorBase::CheckChar(char ch) {
if (v_ch_set_.empty())
return 1;
CAutoVector<CValidCharSet*>::iterator iter = v_ch_set_.begin();
while(iter!=v_ch_set_.end()) {
CValidCharSet *vcs = *iter;
switch(vcs->type_) {
case CS_DIGIT:
if (isdigit(ch))
return 1;
break;
case CS_ALPHA:
if (isalpha(ch)) ///< 原来是==0
return 1;
break;
default:
if (strchr(vcs->chars_.c_str(),ch))
return 1;
}
iter++;
}
return 0;
}
2.退出时报内存泄漏
以CStringValidator为例.
校验器创建后,每绑定一个控件增加一次引用计数.但是,解除绑定时没有释放.增加在CBindControl析构中释放校验器.
CBindControl::~CBindControl() {
if (validator_) validator_->Release();
}