【发布时间】:2015-09-13 20:16:07
【问题描述】:
我有一堂课:
class Parent {
public:
virtual void Update() {}
};
以及扩展它的类:
class Child : public Parent {
public:
virtual void Update() {
/*code*/
}
};
我将它们存储在向量中
vector<Parent*> v;
一个名为“tick”的函数将循环遍历它们并运行它们的更新函数。
问题是:当我将它们添加到向量中并立即运行“tick”时,一切正常。但是当我在其他时间点运行“tick”函数时它不起作用(该函数不仅不会被调用,它还会阻塞程序)。
我试图尽可能地分解它。 产生错误的代码应该是这样的:
class Parent {
public:
virtual void Update() {}
};
class Child : public Parent {
public:
virtual void Update() {
/*code*/
}
};
class Main {
public:
vector<Parent*> v = vector<Parent*>();
void tick() {
printf("UPDATE");
for (Parent* &p : v)
p->Update();
printf("STOP\n");
}
};
class Program {
private:
Main m = Main();
public:
static class Program* prog = new Program();
void addOne() {
Child child = Child();
Parent* p = &child;
m.v.push_back(p);
/*works when tick(); here*/
}
void tick() {
m.tick();
}
}
int main(int argc, char* argv[]) {
Program::prog->addOne();
/*doesn't work when Program::prog->tick(); here*/
return 0;
}
不起作用意味着它打印 UPDATE 但不打印 STOP。
【问题讨论】:
-
恐怕你需要给我们更多的东西来处理你目前拥有的东西。你能举一个小例子来说明你描述的行为吗?
-
显示填写
vector<Parent*>的代码和调用Update()的代码 -
能在调用函数的地方加上代码吗?或者更好的是,您能否粘贴一个显示您描述的行为的示例?
-
使用smart pointers 存储在您的向量中。