函數返回指向抽象類的指針是否有意義?返回指向抽象類的指針的C++函數
2
A
回答
12
當然,這就是多態性的要點:傳遞和使用指向抽象類的指針,而不管具體實現是什麼。
其中,Factory Pattern通常返回一個指向抽象類的指針。
1
是的它確實有道理。
這就像使用接口。
1
排序假設您有一個名爲AClass
的抽象類,具體實現名爲CClass
。您可以返回指向CClass
的實例的指針,該實例的類型可以是AClass*
或CClass*
。但是,由於無法實例化抽象類,因此無法返回指向抽象類的實例的指針。
但是,如果您返回AClass*
,您的客戶端將只能訪問AClass
的接口;如果他們想要訪問CClass
功能沒有包含在AClass
的界面中,他們需要將指針指向CClass*
。
3
是的,操作指向抽象類的指針(或引用)是有意義的,以便將接口從實際實現中分離出來並利用polymorphism的好處。
但要注意的是,如果該功能是負責分配返回的對象(某種factory)的,請務必使用一個虛擬的析構函數,以便能夠從抽象類的指針正確地刪除對象:
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
的析構函數。
相關問題
- 1. 指向抽象類的指針數組
- 2. C++返回指向類的指針
- 3. 指向抽象類的指針
- 4. 函數返回指向int的指針
- 5. C - 指向返回字符串函數的指針函數的指針數組
- 6. C++:如何從函數返回指針指向指針?
- 7. C++函數指針的返回類型
- 8. C++:指向「新類()」函數的指針
- 9. 聲明一個N指針數組返回指向函數的指針返回指向字符的指針
- 10. 函數返回指針C
- 11. 函數返回指針C
- 12. 返回指向函數中指針的指針
- 13. 從函數返回指向二維數組的指針 - C++
- 14. 函數返回指向常量2-d數組的指針(C++)
- 15. 返回函數指針指向嵌套函數C
- 16. 返回指向類的指針的函數
- 17. 指針calloc函數是否返回指針向量? (C語言)
- 18. 抽象函數指針
- 19. 指向抽象基類的指針需要一些轉換? C++
- 20. C函數返回指向垃圾內存的指針
- 21. C++返回指向函數結構的指針
- 22. 返回void的C++/C函數指針*
- 23. 抽象類指針
- 24. C++:指針和抽象數組類
- 25. PHP函數返回指向另一個函數的指針
- 26. 成員函數返回指向成員函數的指針
- 27. 函數返回從Const指針向量生成的指針
- 28. 使用指針指向基類抽象類的子類成員
- 29. 返回指向數組的指針
- 30. 返回指向數組的指針
當然。例如,一個班級工廠通常會這樣做。 – rodrigo
例如,如果你有一個std :: vector 成員,並且一個Get函數返回一個Base * ... Base可以是抽象的...所以基本上,當你使用多態或pimpl習語時它是有意義的 –
Melkon
@ Melkon:在這方面,pimpl如何相關? –