Obsolètes
 
Obsolètes
TL de la majeure
Cours Apprentissage Automatique
Robotique autonome
Installation de sa machine
Mineure Vie Artificielle
 
 
Items
TL d’introduction à la programmation C/C++ avec gcc sous Linux et Window
Son et vidéo
Acquisition et traitement video avec bkbd et mirage
Les objets et la mémoire
 
  
> SIRIEN Home > Obsolètes > Les objets et la mémoire

Systèmes Interactifs et Robotiques

Les objets et la mémoire
 
  by Frezza-Buet Herve
 
 

Vous comprendrez...

... qu’il faut être méfiant avec la mémoire, car le C++ est truffé d’allocations et désallocations implicites. On vous proposera ici de vous restreindre à un usage de la mémoire "à la java", reservant un usage plus avancé au cours de C++.

Exercices

Préliminaire

Copier les fichiers Truc.h et Truc.cc dans le dossier de travail que vous utiliserez pour ce TP. Vous n’avez pas à comprendre son contenu. Il définit un type Truc, qui trace à l’écran ce qui lui arrive en mémoire.

Exécutez ce code et voyez ce qu’il se passe.

Pour rappel, il faut faire

g++ -c Truc.cc


puis pour votre fichier main

g++ -c Main.cc
g++ -o prog Main.o Truc.o
./prog

Dans la sortie écran, on voit les allocations de mémoire (une seule ici, dont le numéro est 0), et les désallocations. L’ensemble des objets trucs en cours est représenté par la liste des numéros de ces objets, entre accolades... cet ensemble doit être vide en fin de main !

Essayez ceci pour comparer...

L’ensemble vide n’apparaît pas ! Alors que si vous décommentez le delete.... Essayez.

Essayez celui-ci, et corrigez-le pour qu’il ne reste pas d’instance de Truc non libérée à la fin ({} doit apparaître).

Exercice sur l’appel de fonction

Essayez ces deux programmes, que constatez-vous ?

Le second est exactement le comportement de java pour le passage de paramètres.

Essayez celui-ci, en notant l’usage de l’opérateur &...

Exercice sur l’allocation dans le tas (new)

Observez le comportement de ce code

Modifiez ce programme pour que toutes les instances de Truc soient dans le tas, i.e soient allouées explicitement avec un new.

Construisez vos propres classes

Dans ce TL, l’idée est de se ramener, en C++, au fonctionnement de java (on alloue toutes les instances avec des new). Il ne faut pas en rester là dans la pratique du C++, mais ce point est hors du propos du présent TP.

Téléchargez Machin.h, Machin.cc, Main.cc, et lisez-les dans cet ordre.

Exécutez Main.cc. Il y a des fuites de mémoires.... Et une gestion assez peu rationnelle des pointeurs. Modifiez l’ensemble de ce code pour que la gestion des pointeurs soit claire pour l’utilisateur de la classe Machin, et implémentez un destructeur cohérent avec la gestion que vous aurez choisie.