簡體   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