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