繁体   English   中英

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

[英]C++ function that returns a pointer to an abstract class

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

当然,这就是多态性的全部要点:无论具体实现是什么,都要传递并使用指向抽象类的指针。

其中,Factory Pattern通常返回指向抽象类的指针。

是的,操纵指针(或引用)到抽象类是有意义的,以便将接口与实际实现分离并利用多态的好处。

但请注意,如果函数负责分配返回的对象(某种工厂 ),请确保使用虚拟析构函数能够从抽象类指针中正确删除该对象:

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的析构函数就不会被调用。

是的,它确实有意义。
这就像使用接口。

有点。 假设你有一个名为一个抽象类AClass ,一个叫具体实现CClass 您可以返回指向CClass实例的指针,该实例可以是AClass*CClass*类型。 但是,由于无法实例化抽象类,因此无法返回指向抽象类实例的指针。

但是,如果您返回AClass* ,您的客户端将只能访问AClass的接口; 如果他们想访问CClass不包括在接口功能AClass ,他们将需要转换指针是CClass*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM