[英]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.