我有一个三级深度的类层次结构,如下所示:
class A {
public:
virtual ~A() {}
}
class B : public A {
public:
virtual ~B() {}
void foo(E *e) {
e->remove(this);
}
}
class C : public B {
public:
~C() {}
}
class E {
public:
void remove(A *a) {
delete a;
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我想知道当我呼叫foo()一个物体时会发生什么C.难道要删除整个对象或仅B与A对象的一部分,并保留C在内存中还是部分?
我有这样的事情:
class A {
void add (A* a) {
//add a to a vector<A*>
}
virtual void draw() = 0;
}
class B : public A {
void tick() {}
void draw() {}
}
class C : public A {
void draw() {}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是这样的循环:
for(int i=0; i<vector.size(); i++) {
vector[i]->tick();
}
Run Code Online (Sandbox Code Playgroud)
问题是,并非此向量中的所有元素都具有该tick()方法,但我仍然希望将它们放在同一个向量中,因为我还希望能够遍历向量并调用draw()所有元素.有什么方法可以解决这个问题吗?我正在考虑使用另一种载体,但我宁愿不这样做.