declaration d'une variable et new

declaration d'une variable et new - C++ - Programmation

Marsh Posté le 06-05-2008 à 14:37:22    

Je fais appel a vos talents de pedagogue pour une petite question sur les bases.
 
new est cense retourner un pointeur sur un objet.
Alors pourquoi gcc compile sans erreur ces deux codes (surtout le premier) ?
 

Code :
  1. Object o;
  2. o = new Object();


 

Code :
  1. Object* o;
  2. o = new Object();

Reply

Marsh Posté le 06-05-2008 à 14:37:22   

Reply

Marsh Posté le 06-05-2008 à 14:38:50    

tu compiles avec quelles options paske aucune des deux ne devrait passer :E
 
Obejct* p = new Object;
 

Reply

Marsh Posté le 06-05-2008 à 14:45:59    

Au temps pour moi je me suis emmele avec eclipse, il ne compilait pas mon .cpp . je vais essayer de resoudre ca.
 
Pourquoi le deuxieme code n'est pas correct ?

Reply

Marsh Posté le 06-05-2008 à 14:46:46    

frankie_flowers a écrit :


 
Pourquoi le deuxieme code n'est pas correct ?


parce que tu n'initialises pas ton pointeur

Reply

Marsh Posté le 06-05-2008 à 14:57:38    

Bah ca compile sans meme un warning :??:
Je declare Object* o comme attribut de ma classe, et je fais le new dans le constructeur.

Reply

Marsh Posté le 06-05-2008 à 15:01:49    

On peut en C++ écrire la deuxième syntaxe et rien ne hurle, effectivement.

 

Mais c'est très très laid. Et surtout ça coredump direct si tu oublies l'initialisation avant d'utiliser la classe (note que c'est pareil si tu mets le pointeur à NULL avant aussi...)

 

Mieux vaut écrire :
Object * o = NULL;
o = new Object();

 

ou

 

Object * o = new Object();


Message édité par Elmoricq le 06-05-2008 à 15:02:51
Reply

Marsh Posté le 06-05-2008 à 15:06:04    

ok je vois :jap:


Message édité par frankie_flowers le 06-05-2008 à 15:06:12
Reply

Marsh Posté le 06-05-2008 à 15:26:40    

frankie_flowers a écrit :

Je declare Object* o comme attribut de ma classe, et je fais le new dans le constructeur.


C'est très différent du code que tu as donné plus haut.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed