函数返回指向抽象类的指针是否有意义?
答案 0 :(得分:12)
当然,这就是多态性的全部要点:传递并使用指向抽象类的指针,无论具体实现是什么。
其中,Factory Pattern通常返回一个指向抽象类的指针。
答案 1 :(得分:3)
是的,操纵指针(或引用)到抽象类是有意义的,以便将接口与实际实现分离,并利用polymorphism的好处。
但是请注意,如果函数负责分配返回的对象(某种factory),请确保使用虚拟析构函数能够从抽象类指针中正确删除对象: / p>
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
~Derived() override {
// Do some important cleanup
}
};
Base* factory() {
return new Derived;
}
Base* base = factory();
base->~Base(); // calls Derived::~Derived
如果没有Base
的虚拟析构函数,则Derived
的析构函数将不会被调用。
答案 2 :(得分:1)
是的,它确实有意义。
就像使用接口一样。
答案 3 :(得分:1)
排序。假设您有一个名为AClass
的抽象类,其具体名为CClass
。您可以返回指向CClass
实例的指针,该实例可以是AClass*
或CClass*
类型。但是,由于无法实例化抽象类,因此无法返回指向抽象类的实例的指针。
但是,如果您返回AClass*
,您的客户端将只能访问AClass
的界面;如果他们想要访问CClass
界面中未包含的AClass
功能,他们需要将指针投射为CClass*
。