Gibt es eine Verwendung für die Herstellung einer geschützten virtuellen Destruktor?

/*Child is inherited from Parent*/
class Parent {  
  public:  
    Parent () //Constructor
    {
        cout << "\n Parent constructor called\n" << endl;
    }
  protected:
    ~Parent() //Dtor
    {
        cout << "\n Parent destructor called\n" << endl;
    }
};

class Child : public Parent 
{
  public:
    Child () //Ctor
    {
        cout << "\nChild constructor called\n" << endl;
    }
    ~Child() //dtor
    {
        cout << "\nChild destructor called\n" << endl;
    }
};

int main ()
{
    Parent * p2 = new Child;          
    delete p2;
    return 0;
}

Wenn ich Parent's Destruktor virtual, dann besorge ich einen Fehler, so was ist der Zweck der Herstellung einer geschützten virtuellen Destruktor?

  • Vielleicht sollten wir anfangen mit "warum würden Sie machen dtor geschützt?".
  • Warum haben Sie jemals wollen, um den virtuellen Destruktor? Sollten Sie nicht wissen, den Zweck? Eine protected-Destruktor bedeutet, dass Objekte, die sollte nicht zerstört werden durch die base-Pointer, also den code in main ist schlicht falsch.
  • Siehe stackoverflow.com/questions/461203/...
  • Ich verstehe die Verwendung von virtuellen dtors und die Nutzung des geschützten dtors, aber ich sah einige code mit geschützten virtuellen dtors. Was ich nicht verstanden habe war, wenn beide benutzt werden, was für eine Wirkung wird es erzeugt?
  • durch dtors geschützt werden Sie verhindern, dass die Bildung der Basis-Klasse-Objekte auf den stack. am i rite?
InformationsquelleAutor tusharfloyd | 2012-01-23
Schreibe einen Kommentar