C ++函数,返回指向抽象类的指针

时间:2015-08-03 12:02:59

标签: c++ oop abstract-class

函数返回指向抽象类的指针是否有意义?

4 个答案:

答案 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*