小编Top*_*sic的帖子

当你有一个虚拟析构函数时,基类指针中的"删除这个"是否会删除派生类对象?

我有一个三级深度的类层次结构,如下所示:

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.难道要删除整个对象或仅BA对象的一部分,并保留C在内存中还是部分?

c++ oop object virtual-destructor

2
推荐指数
1
解决办法
1894
查看次数

在包含不同子类的向量中的某些对象上调用函数

我有这样的事情:

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()所有元素.有什么方法可以解决这个问题吗?我正在考虑使用另一种载体,但我宁愿不这样做.

c++ oop inheritance vector subclass

0
推荐指数
1
解决办法
255
查看次数

标签 统计

c++ ×2

oop ×2

inheritance ×1

object ×1

subclass ×1

vector ×1

virtual-destructor ×1