我需要设置一个类继承结构,其中抽象基类只保存成员变量(但没有成员方法).成员方法将由派生类定义.因此,我需要的是这篇文章:在没有任何纯虚方法的情况下创建一个类抽象
从那里的前两个答案,我意识到有两种方法可以实现它:
我很想知道这两种方法之间的区别.是否存在一个应该优先于另一个的情况(或者某些特殊情况,其中一个可以工作而不是另一个)?我想到了,无法想到任何事情.
我在这里搜索了一些帖子的答案(是否有用于使受保护的析构函数虚拟?,C++:受保护的类构造函数,抽象类'析构函数应该是纯虚拟的吗?)尝试将某些东西放在一起,但我不能得出结论.
主要区别在于
Base * ptr = new Derived;
delete ptr;
Run Code Online (Sandbox Code Playgroud)
有虚拟析构函数是合法的,没有虚拟析构函数就会出现UB。还dynamic_cast
需要至少一个虚函数。
因此,如果您想要多态行为,请使用(纯)虚拟析构函数。如果您不想要它,请使用受保护的构造函数,并且不要为多态性(vtable)支付开销。但随后声明析构函数也受保护,以防止通过基指针删除。