c++ - 在这种情况下,我可以避免使用身体的纯虚函数吗
问题描述
读完这篇文章后,纯虚函数的用例用例?我的印象是可以避免使用带有主体的纯虚函数,但是在这种情况下我不知道该怎么做:
我有一个抽象基类,我称之为“父”和一个派生类的集合,我称之为“child1”,“child2”等。我还有另一个类,我称之为“list”,它包含一个可以设置为指向各种子集合的实例的父指针数组。例如,列表实例的数组字段可能包含指向 2 个 child1 和 1 个 child2 的指针。
删除列表实例时,我想释放 child1 和 child2 的各种实例,因此我需要 child1、child2 等的析构函数。此外,这需要我有一个抽象父类的析构函数。
再一次,上面的链接说服了我,我可以找到不这样做的方法,或者可能,我的问题构思不好,因为我发现自己需要这样做。
如果堆栈溢出是这个问题的错误堆栈交换,请告诉我,我会移动它。
感谢您的帮助 PS:这是一些代码:
#include <iostream>
#define arlen 10
class parent{
public:
virtual ~parent();
void somefunction();
};
parent::~parent(){}
class child1: public parent{
public:
~child1();
void somefunction();
};
child1::~child1(){}
class child2: public parent{
public:
~child2();
void somefunction();
};
child2::~child2(){}
class list{
public:
parent* ar[arlen];
~list(){
for (int n=0; n<arlen; n++) delete ar[n];
}
}
int main(){}
解决方案
在我看来,您真正需要的virtual
只是parent
.
使用虚拟 dtor,通过parent
指针删除编译器将正确调用派生类析构函数。
这就是你真正需要的,我正确理解了你的问题,然后添加
virtual ~parent() = default;
到您的基类应该可以解决问题。
推荐阅读
- c - 关于c源码中管道函数的问题
- javascript - 如何在json中写入数据
- security - 发布网站/移交给客户时,是否需要加密 appsettings.json 文件?
- android - 为什么 Angular 不会检测到 android 上的属性更改?
- java - 为什么转换后的杰克逊时间与预期的 Unix 时间不同?
- php - PHP函数没有给出预期的输出
- kubernetes - `ServiceEntry` 可以仅应用于一项服务吗?
- json - 如何使用 jsonpath 解析 json 字符串?
- python - 如何在 html 字符串中使用 findall?
- mysql - MySQL - 数字列 desc 索引,最后显示 Null