En C#, un nouvel opérateur alloue de la mémoire sur le tas et l'initialise avec la valeur par défaut du type de données. Cependant, en C , le comportement du nouvel opérateur diffère considérablement.
Le code que vous avez fourni démontre une fuite de mémoire :
class A { ... }; struct B { ... }; A *object1 = new A(); B object2 = *(new B());
Voici pourquoi cela se produit :
Pour éviter les fuites de mémoire, suivez ces directives :
template<typename T> class automatic_pointer { public: automatic_pointer(T* pointer) : pointer(pointer) {} ~automatic_pointer() { delete pointer; } T& operator*() const { return *pointer; } T* operator->() const { return pointer; } private: T* pointer; }; int main() { automatic_pointer<A> a(new A()); automatic_pointer<B> b(new B()); }
En utilisant ces techniques, vous pouvez éviter les fuites de mémoire et assurer une bonne gestion des ressources dans le code C.
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!