【发布时间】:2016-05-01 11:49:23
【问题描述】:
我有一个像这样的基本抽象类;
class X {
public:
virtual ~X(){}
virtual doSomething() = 0;
};
然后我用 Y、Z 等几个类来实现这个,每个类都有自己的构造函数、析构函数和 doSomething 实现。在我的主要功能中我做;
int main(){
std::vector<X *> v;
X *x1 = new Y();
X *x2 = new Z();
v.push_back(x1);
v.push_back(x2);
for(auto p : v){
p->doSomething()
}
}
这会按预期调用相应的 doSomething 实现。但我的问题是我正在使用指向抽象类的指针来通过其基类操作派生类的层次结构。这迫使我使用 new 在堆上创建实例,之后我必须手动删除它们。有没有办法做这样的事情;
int main(){
std::vector<X> v;
Y x1();
Z x2();
v.push_back(x1);
v.push_back(x2);
for(auto p : v){
p.doSomething()
}
}
这样当我退出 main 时会自动调用析构函数。我知道我不能创建抽象类的成员,但是使用指针来实现这一切似乎很奇怪。当然,必须有一种方法可以在没有指针和新删除的情况下做到这一点。如果有人向我展示了最佳实践,那就太好了。
【问题讨论】:
标签: c++ inheritance