我实现了一个加权方案的类,并在类中创建了4个具有不同参数数量的构造函数。当我尝试使用特定构造函数的参数调用构造函数时,也会调用没有参数的默认构造函数。我无法理解为什么会发生这种情况。
构造函数的定义:
593 UnigramLMWeight(double param_log_,int select_smoothing_,double param_smoothing1_,double param_smoothing2_)
594 : select_smoothing(select_smoothing_), param_log(param_log_), param_smoothing1(param_smoothing1_),
595 param_smoothing2(param_smoothing2_)
596 {
调用构造函数:
79 enquire.set_weighting_scheme(Xapian::UnigramLMWeight(double(322.0),int(2),double(2000.0),double(2.0)));
但我检查了设置的值是否来自默认构造函数。
任何人都可以帮助我为什么调用这个默认构造函数,或者每次在参数构造函数之后调用默认构造函数或将参数转换为其他类型和构造函数时尝试找到这样的构造函数但是无法找到这样的构造函数最后调用默认构造函数。
set_weigthing方案的代码是:
926 Enquire::set_weighting_scheme(const Weight &weight_)
927 {
928 LOGCALL_VOID(API, "Xapian::Enquire::set_weighting_scheme", weight_);
929 // Clone first in case doing so throws an exception.
930 Weight * wt = weight_.clone();
931 swap(wt, internal->weight);
932 delete wt;
933 }
set_weighing方案set方法是否调用clone函数,当它克隆默认构造函数时,这是问题的根本问题,是这样吗? 这可能是理由吗?
答案 0 :(得分:2)
当您复制对象(clone?)时,将调用复制构造函数。 似乎您没有实现自定义复制构造函数,因此调用编译器生成的默认复制构造函数。
UnigramLMWeight(const UnigramLMWeight& copy_from)
{
// implement copy here
}
http://login2win.blogspot.com/2008/05/c-copy-constructor.html可能会有所帮助