簡體   English   中英

我可以在這種情況下避免使用純純虛函數嗎?

[英]Can I avoid a pure virtual function with a body in this case

看完這篇文章后,帶有身體的純虛函數的用例? 我的印象是可以避免將純虛函數與主體一起使用,但是在這種情況下我不知道該怎么做:

我有一個抽象的基類,我將其稱為“父級”,並將一個派生類的集合稱為“ 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(){}

在我看來,您真正需要的只是parentvirtual析構函數。

使用虛擬dtor,通過parent指針刪除,編譯器將正確調用派生類的析構函數。

這就是您真正需要的,我正確理解了您的問題,然后添加

 virtual ~parent() = default;

您的基類應該做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM