Prise en charge par C des blocs « finalement » et de l'idiome RAII
Contrairement à la croyance populaire, C ne prend pas en charge les blocs « finally ». Au lieu de cela, il utilise un concept fondamental connu sous le nom de RAII (Resource Acquisition Is Initialization). initialisation et publié dans son destructeur. Lorsqu'un objet sort de la portée, son destructeur est automatiquement invoqué, garantissant ainsi le nettoyage des ressources même en présence d'exceptions. Cela élimine le besoin de blocs «finally» explicites.
Un exemple est illustré ci-dessous :
De plus, RAII simplifie la gestion des classes des ressources. Lorsque des objets membres gèrent des ressources, la classe propriétaire peut minimiser la responsabilité de son destructeur, en s'appuyant sur les destructeurs de ses objets membres pour libérer des ressources.Déclaration 'using' de RAII vs C#
class lock { mutex& m_; public: lock(mutex& m) : m_(m) { m.acquire(); } ~lock() { m_.release(); } }; class foo { mutex mutex_; public: void bar() { lock scopeLock(mutex_); // Lock object foobar(); // May throw an exception // scopeLock will be destructed and release the mutex, regardless of an exception } };
Semblable à RAII, l'instruction « using » de C# garantit une destruction déterministe des ressources. Cependant, RAII diffère en étendant la gestion des ressources à tous les types de ressources, y compris la mémoire. En revanche, les instructions « using » dans .NET libèrent de manière déterministe des ressources, à l'exception de la mémoire, qui est gérée pendant les cycles de récupération de place.
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!