这是一个真正的谜。我创建了一个基类:
class Generator
{
public:
Generator(int);
Generator();
virtual ~Generator() {};
//more virtual stuff follows
...
};
Generator::Generator()
{
//nothing to do here
}
然后我创建了一个子类:
class LoopGenerator : public Generator
{
public:
LoopGenerator();
~LoopGenerator();
virtual void add(RandomStripe&);
///more stuff follows
...
protected:
unsigned int pointer;
std::vector<Generator*> stripes;
};
LoopGenerator::LoopGenerator()
{
pointer = 0;
stripes = vector<Generator*>();
}
void LoopGenerator::add(Generator* stripe)
{
stripes.push_back(stripe);
}
然后我尝试创建LoopGenerator
实例:
LoopGenerator gen = LoopGenerator();
gen.add(RandomStripe((unsigned int)seedval, 5,10, 231,231, 0,255, 0,255));
你可以看到我调用了方法.add
。 .add
方法称为,但构造函数不是。我实际上认为LoopGenerator()
是一个构造函数调用!
这是构造函数中断点的结果:
答案 0 :(得分:0)
LoopGenerator
构造函数。问题出在调试器一侧,由于未知原因,不允许在构造函数中放置断点。在构造函数中输出日志消息,您将看到它被调用。
BTW你构建对象的行应该是
LoopGenerator gen;
而不是
LoopGenerator gen = LoopGenerator();
(这是正确的,但不是惯用的,没有必要)。以同样的方式声明
stripes = vector<Generator*>();
构造函数中的不是必需的,可以在不改变程序含义的情况下省略,