主.cpp:
options my_options;
tree my_trees;
CODON_alphabet my_alphabet(1);
likelihood_engine my_likelihood(&my_options, &my_trees, &my_sites);
CODON_M0 m0(&my_trees, &my_alphabet, &my_likelihood);
CODON_alphabet 类具有作为父类的字母表。当我创建 CODON_M0 对象时,由于某种原因,alphabet 和 CODON_alphabet 类的构造函数都被调用了两次。这发生在 CODON_M0 构造函数的第一行被命中之前。谁能指出我正确的方向来弄清楚为什么会这样?如果我遗漏了任何重要信息,请告诉我。谢谢。
编辑:对不起,我以为这里的每个人都能读懂我的想法。下面是一些我已经简化为尽可能少做的代码,但仍然调用了不需要的构造函数。
class CODON_M0: public CODON_model
{
public:
CODON_M0(tree* tree_ptr, CODON_alphabet* alpha_ptr, likelihood_engine* like_ptr)
}
class CODON_model: public model
{
public:
CODON_alphabet* my_alphabet;
CODON_model(tree* tree_ptr, CODON_alphabet* alpha_ptr, likelihood_engine* like_ptr)
}
class model
{
public:
model() {}
}
class CODON_alphabet: public alphabet
{
public:
CODON_alphabet()
{
cout << "\n\n\n *** CODON_alphabet constructor called. *** \n\n\n";
}
}
class alphabet
{
public:
alphabet()
{
cout << "\n\n\n *** alphabet constuctor called. *** \n\n\n";
}
}
我正在单步执行 gdb 中的代码,当我点击创建 CODON_M0 对象并进入构造函数的行时,我看到字母和 CODON_alphabet 构造函数已被调用两次的消息。为什么?