C++ 在这种情况下,我可以避免使用实体的纯虚函数吗

C++ 在这种情况下,我可以避免使用实体的纯虚函数吗,c++,C++,读了这篇文章后,我的印象是,可以避免对身体使用纯虚拟功能,但我不知道在这种情况下如何操作: 我有一个抽象基类,我将其称为“parent”,还有一个派生类集合,我将其称为“child1”、“child2”等。我还有另一个类,我将其称为“list”,它包含一个父指针数组,可以设置为指向各种子集合的实例。例如,列表实例的数组字段可能包含指向2个child1和1个child2的指针 删除列表实例时,我希望释放child1和child2的各种实例,因此我需要一个用于child1、child2等的析构函数。

读了这篇文章后,我的印象是,可以避免对身体使用纯虚拟功能,但我不知道在这种情况下如何操作:

我有一个抽象基类,我将其称为“parent”,还有一个派生类集合,我将其称为“child1”、“child2”等。我还有另一个类,我将其称为“list”,它包含一个父指针数组,可以设置为指向各种子集合的实例。例如,列表实例的数组字段可能包含指向2个child1和1个child2的指针

删除列表实例时,我希望释放child1和child2的各种实例,因此我需要一个用于child1、child2等的析构函数。此外,这要求我为抽象父类提供一个析构函数

再次,上面的链接说服了我,我可以找到一种方法不这样做,或者可能,我的问题是构思不周,因为我发现自己需要这样做

如果堆栈溢出是这个问题的错误stackexchange,请让我知道,我会移动它

谢谢你的帮助 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(){}
#包括
#定义arlen 10
班级家长{
公众:
虚拟~parent();
void somefunction();
};
父项::~parent(){}
类别child1:公共父级{
公众:
~child1();
void somefunction();
};
child1::~child1(){}
第2类:公共家长{
公众:
~child2();
void somefunction();
};
child2::~child2(){}
班级名单{
公众:
母公司*ar[arlen];
~list(){

for(int n=0;n在我看来,您真正需要的是
父对象的
虚拟析构函数

使用虚拟dtor,通过
parent
指针删除,编译器将正确调用派生类析构函数

这就是你真正需要的,我正确理解了你的问题,然后补充道

 virtual ~parent() = default;

到你的基类应该可以做到这一点。

你能告诉我们到目前为止你作为一种尝试写了什么吗?请展示你的代码,而不是描述它。最好是作为一个。嗯,你发布的链接说纯虚拟析构函数需要一个主体。当然,来点psuedo代码怎么样,我会给你一些minutes@fred不,不是伪代码。这样做会使类抽象?@Neil Butterworth我希望不是,为什么要这样?@Neil Butterworth-你很清楚;不是。但是OP说“我有一个抽象的基类…”,因此我假设类中还有其他纯虚成员函数,将其抽象化。是的,基类将完全抽象,类中还有其他虚函数it@fred在抽象类中有一个实体的虚拟方法没有错。一个纯虚拟方法足以使类抽象。我知道李关于OO理论,也许有些福音派有不同的观点,但谁在乎呢