Skip to content

Latest commit

 

History

History
84 lines (59 loc) · 2.71 KB

File metadata and controls

84 lines (59 loc) · 2.71 KB

Pointeurs

  • Tout objet manipulé par l’ordinateur est stocké dans sa mémoire, à un emplacement que l’on nomme adresse mémoire
  • Lorsqu’on manipule une variable ou une fonction, le compilateur manipule l’adresse de cette dernière pour y accéder
  • Les pointeurs sont un type de variables qui correspondent en gros aux adresses mémoires
int *ptr ; //pi est un pointeur d’entier
int * ptr;
int* ptr; //les 3 lignes sont équivalentes
  • Les 2 opérateurs qui permettent de manipuler les pointeurs sont :
    • L’opérateur déréférencement * pour accéder à la valeur contenue dans la zone mémoire pointée
    • L’opérateur d’indirection & pour récupérer l’adresse d’une variable
int unEntier = 3;
int * ptr;  //définition d’un pointeur d’entier
ptr = & unEntier;  // initialise le pointeur avec l’adresse de la variable unEntier
cout << *ptr << endl; //affiche 3
*ptr = 7;
cout << unEntier << endl; //affiche 7
  • Il est fortement recommandé d’initialiser les pointeurs lors de leur création.
    • Soit à partir de l’adresse d’une autre variable
    • Soit en lui affectant la valeur NULL
int i = 3;
int *ptr = &i; //initialisation de ptr avec l’adresse de i
float *ptrFloat = NULL //initialisation à NULL
float f = 5.5;
ptrFloat = &f;

Exercice 10

Creation d'un objet pointé

  • Il est possible de créer des pointeurs pour les types primitifs mais également pour les classes.
Personne *p = new Personne(); // Appel du constructeur
  • Utilisation des données membres et des fonctions d'une classe à partir d'un point.
Personne *p = new Personne();
//Affectation d'une variable de l'objet pointé
p->nom = "Nom"
//Appel d'une fonction
p->afficheNom();

Delete

  • Le mot clé delete libère un bloc mémoire.

  • Une fois que l'on n'a plus besoin de la case mémoire, il faut la rendre à l'ordinateur. Cela se fait via l'opérateur delete.

int *pointeur(0);

pointeur = new int;

delete pointeur;  //On libère la case mémoire

Cas du constructeur de copie

On a vu que le constructeur de copie est créé par défaut par le compilateur lorsque celui-ci n'est pas explicitement écrit.

Problème :

Dans le cas de variable membre de type pointeur, il va recopier l'adresse mémoire de la classe copié. Ce qui implique donc que nos 2 objets vont avoir chacun un pointeur qui va pointer sur le même bloc mémoire. Par conséquent si le contenu de ce bloc est modifié par l'une des classes, il le sera pour l'autre. C'est pourquoi il est nécessaire de créer soi même le constructeur de copie afin de gérer proprement la copie lorsque notre classe posséde des pointeur en variable membre.