函数返回指向抽象类的指针是否有意义?返回指向抽象类的指针的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. 函数返回指向int的指针
- 3. C - 指向返回字符串函数的指针函数的指针数组
- 4. C++:如何从函数返回指针指向指针?
- 5. C++函数指针的返回类型
- 6. 函数返回指针C
- 7. 函数返回指针C
- 8. 函数返回指向常量2-d数组的指针(C++)
- 9. 从函数返回指向二维数组的指针 - C++
- 10. 返回函数指针指向嵌套函数C
- 11. 返回指向类的指针的函数
- 12. 抽象函数指针
- 13. C函数返回指向垃圾内存的指针
- 14. 返回void的C++/C函数指针*
- 15. 使用指针指向基类抽象类的子类成员
- 16. 返回指向数组的指针
- 17. 返回指向数组的指针
- 18. 重载的函数在fortran 2003中的抽象接口旁边返回指向基类型的指针?
- 19. 目标C中的指针返回函数的指针
- 20. 返回类型的lambda函数指针
- 21. C++指向类的指针
- 22. Fortran2003:指向函数的过程指针,返回指向多态类型的指针
- 23. 指向类函数的指针
- 24. C++方法返回指向抽象类的指针,需要使用子类中的方法
- 25. C++:返回子类指针
- 26. 函数指针数组指针用作函数的返回值
- 27. 指向函数的指针
- 28. 从函数返回指向全局数组的指针
- 29. 返回指向分配给函数的内存的指针
- 30. 指向指向int参数并返回void的函数的指针数组的指针
当然。例如,一个班级工厂通常会这样做。 – rodrigo
例如,如果你有一个std :: vector 成员,并且一个Get函数返回一个Base * ... Base可以是抽象的...所以基本上,当你使用多态或pimpl习语时它是有意义的 –
Melkon
@ Melkon:在这方面,pimpl如何相关? –