可以删除抽象类而不是子类吗?所有的分配都会因此被释放吗?
以以下情况为例,但请不要将您的答案仅限于该情况:
struct A {
virtual void fun() = 0;
};
struct B : public A {
void fun() { /* actually doing something here. */ }
};
struct C {
A *a;
void OneTask() {
// (...)
a = new B();
}
void AnotherTask() { /* using fun() in some way. */ }
~C() { delete a; }
};
这个想法是让 OneTask() 有多种可能的结果,这导致分配一个指向从 A 继承的不同类的指针,B 只是一个例子;然后在 AnotherTask() 和 C 类的其他方法中合理使用这样的结果。