重み付けスキームのクラスを実装し、クラス内に異なる数のパラメーターを持つ 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 関数を呼び出しますか? これは、デフォルトのコンストラクタを複製するときに問題の根本原因となりますか? それが理由でしょうか?