Maison  >  Article  >  développement back-end  >  Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ?

Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ?

王林
王林original
2024-06-03 20:30:00344parcourir

Les destructeurs sont cruciaux dans le polymorphisme C++, garantissant que les objets de classe dérivés nettoient correctement la mémoire lorsqu'ils sont détruits. Le polymorphisme permet à des objets de types différents de répondre au même appel de méthode. Le destructeur est automatiquement appelé lorsqu'un objet est détruit pour libérer sa mémoire. Le destructeur de classe dérivée appelle le destructeur de classe de base pour garantir que la mémoire de la classe de base est libérée.

C++ 中析构函数在多态性中扮演什么角色?

Le rôle du destructeur dans le polymorphisme en C++

Le destructeur joue un rôle crucial dans le polymorphisme en C++. Il garantit que les objets de classe dérivés sont détruits de la manière appropriée pour nettoyer sa mémoire.

Introduction au polymorphisme

Le polymorphisme est la capacité de permettre à des objets de différents types de répondre au même appel de méthode. En C++, cela se fait via l'héritage et les fonctions virtuelles.

Destructeur

Un destructeur est une fonction membre spéciale associée à une classe qui est automatiquement appelée lorsqu'un objet de cette classe est détruit. Il est responsable de libérer toute mémoire ou ressource allouée par l'objet.

Le rôle du destructeur dans le polymorphisme

Lorsqu'un objet de classe dérivée est créé, la mémoire sera allouée pour stocker les données membres uniques à la classe dérivée. Cependant, lorsque l'objet de classe dérivée est détruit, la mémoire de la classe de base doit également être libérée. Le destructeur garantit cela en appelant le destructeur de la classe de base.

Exemple pratique

Considérons le code suivant :

class Base {
public:
    Base() { std::cout << "Base constructed" << std::endl; }
    virtual ~Base() { std::cout << "Base destructed" << std::endl; }
};

class Derived : public Base {
public:
    Derived() { std::cout << "Derived constructed" << std::endl; }
    ~Derived() { std::cout << "Derived destructed" << std::endl; }
};

int main() {
    Base* base = new Derived();
    delete base;
    return 0;
}

Sortie :

Base constructed
Derived constructed
Derived destructed
Base destructed

Dans cet exemple, la mémoire de la Derived 类派生自 Base 类。当 Derived 对象通过 new 运算符被创建时,DerivedBase 构造函数都会被调用。当对象通过 delete 运算符被销毁时,Derived 析构函数会先被调用,释放 Derived 类的内存。然后,Base 析构函数会被调用,释放 Base classe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn