-1

我为加权方案实现了一个类,并在类中创建了 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 方法是否调用克隆函数,这是克隆调用默认构造函数时的根本问题,是这样吗?这可以是理由吗?

4

1 回答 1

2

当您制作对象的副本(克隆?)时,会调用复制构造函数。似乎您尚未实现自定义复制构造函数,因此调用了编译器生成的默认构造函数。

UnigramLMWeight(const UnigramLMWeight& copy_from)
{
// implement copy here
}

http://login2win.blogspot.com/2008/05/c-copy-constructor.html可能会有所帮助

于 2012-05-21T18:42:50.923 回答