Pointeurs
elf
Membre
Surement une question stupide mais est ce que il y a aussi le même problème avec les pointeurs que avac java?
Autrement dit si je fais:
ça afficheras 13 ou 1?
Car si j'ai bien compris ce que j'ai lu sur les pointeurs mc2 = mc; assigne mc2 vers l'espace mémoire de mc dans si ej change la valeure de mc2 ça changeras egualement celle de mc. Donc pour copier la classe je dois utiliser un truc qui s'appelle un opérateur de copie?
Autrement dit si je fais:
<br />MaClasse *mc;<br />MaClasse *mc2;<br />[[mc alloc] init];<br />[[mc2 alloc] init];<br />[mc setValue:13];<br /><br />mc2 = mc;<br /><br />[mc2 setValue:1];<br /><br />NSLog("%i", [mc getValue]);
ça afficheras 13 ou 1?
Car si j'ai bien compris ce que j'ai lu sur les pointeurs mc2 = mc; assigne mc2 vers l'espace mémoire de mc dans si ej change la valeure de mc2 ça changeras egualement celle de mc. Donc pour copier la classe je dois utiliser un truc qui s'appelle un opérateur de copie?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
mc = [[MaClasse alloc] init]; pareil pour mc2.
A la fin, ton code affichera 1.
Je viens de lire tout un livre sur java qui m'assurais le contraire
Oups tu as raison j'ai aps fait attention...
Merci
I'm very sure. J'ai fait pas mal de petits programmes en Java et je peux t'assurer qu'il n'y pas pas de pointeur tel que le C, le C++ ou l'Objective-C l'entend. C'est peut-être d'autre chose dont tu parles
+
Chacha
Sinon le prog affiché à de grandes chances de planter, il faut écrire
Maclasse *mc = [[MaClasse alloc] init];
Java c'est des références, mais pointeur ça revien au même vu que le principe est le même......
Effectivement, on parle de référence d'un objet : il s'agit d'un numéro séquentiel (le 1er object créé a la référence 1, le suivant 2, etc.).
Quelque part dans la JVM, il doit y avoir une table d'association entre référence et pointeur, mais ceci échappe à la portée du simple développeur : seul Dieu (et mpergand) sait...
.
en java il n'existe pas d'arithmetique sur les pointeurs comme en C, on ne fait pas *p++ par exemple, on utilise des Iterator sur des Collections d'objets, c'est plus éloigné du code machine.
Je viens de demander à Dieu et il est comme moi, il sait pôÂ
J'ai lu un truc un jour qui parlait de handle (double pointeurs), ce qui permettrais à la VM de faire de la reallocation de blocs. En fait, on s'en fout un peu, puisque la gestion de la mémoire en java, c'est l'affaire de la VM, point.
Mouais, si tu fais un jour du C++, tu vas avoir des problèmesÂ
En C++ on peut avoir 3 sortes d'objets:
Des objets statiques ou alloués dans la pile:
MaClass monObjet;
Des objects alloués dynamiquement:
MaClass* monObjetPt= new MaClass();
et enfin des références à des objets:
MaClass& monObjetRef=monObjetPt;
et on se rend compte rapidement que dans la majorité des cas, on peut utiliser ces références en lieu et place de ces satanés pointeurs, en particulier pour les paramètres de fonctions:
virtual bool HasResourceFork(const LFile& inFile);
c'est plus clair, car on n'a pas à utiliser l'opérateur d'indirection ->
et puis je pense que toute notion de pointeur devrait être banni des langages modernes, d'ailleurs je ne comprends pas pourquoi en objC, on est obligé de déclarer des pointeurs d'objets, on peut rien en faire de ces pointeurs de toutes les façons. Ils devraient être cachés par l'implémentation...