@thaega@oc.todon.fr
Un cours je sais pas mais je pense pouvoir t'aider si tu as des questions...
En gros, et si je dis pas de bêtises :
- soit tu fais de l'allocation statiques, du genre quand tu définis une variable par "int i = 0;" et la mémoire est allouée à ce moment-là et libérée à la fin du bloc (genre la fonction) dans lequel est définie la variable
- la création d'objet fonctionne comme un allocation statique (un peu comme si on allouait une structure) sauf qu'une fonction est appelée apprès l'allocation (le constructeur) et à la fin du bloc (le destructeur je crois ?)
[...]
@Nocta @thaega@oc.todon.fr En C++ C'est mieux d'utiliser new et delete.
new va en plus appeler un constructeur, et delete le destructeur en plus de l'allocation mémoire.
malloc, et free (bien que ce soit plus plopre au C) sont utilisable mais vaut mieux passer par new et delete
@lleofar @thaega@oc.todon.fr
J'ai plus des réflexes de C en fait x)
J'ai l'impression d'avoir plus embroullé qu'autre chose au final.
Bref, un lien du coup : http://www.commentcamarche.com/contents/190-les-objets-en-langage-c
@thaega@oc.todon.fr @lleofar
Tiens un exemple d'allocation statique (sans le "new") d'objet : https://en.wikipedia.org/wiki/Object_lifetime#C++
En espérant que j'ai pas trop introduit de confusion et que ce soit plus clair ><'
@Nocta @thaega@oc.todon.fr Précision la différence entre statique et dynamique, c'est qu'en statique, tu stocke ton objet dans la pile, et c'est détruit automatiquement quand tu sors du scope.
En dynamique, l'objet est stocké dans un espace mémoire dont l'adresse est aléatoire, qu'il faudra la libérer à un moment ou un autre.
@thaega@oc.todon.fr @Nocta Un truc qu'il faut garder en tête c'est que la pile est limitée, alors que le tas (la zone mémoire dont le système se sert pour l'allocation dynamique) est beaucoup plus grand. Ça dépend de la quantité de RAM installée, et de ce que l'OS autorise (en fonction de l'utilisateur, et de la limite par processus, etc.), mais on peut considérer que c'est illimité.
@Nocta @thaega@oc.todon.fr
c'est du C ça. :p
En C++ tu utilises plutôt new int()[100] et delete.
Mais! en C++14, tu as des pointer intelligents qui libère la mémoire dès que plus rien ne pointe dessus. ( les shared_pointer je crois... ) Mieux que le garbage collector. (à priori c'est géré à la compilation plutôt qu'à l’exécution.
Il y a aussi d'autre types de pointers, mais je connais mal le C++14 donc je vais pas aller plus loin.
@Ambraven @thaega@oc.todon.fr Rololo, on arrête pas le progrès
@Ambraven @thaega@oc.todon.fr @Nocta Oui :) J'allais indiquer cette page là qui explique bien la chose: https://openclassrooms.com/courses/c-gerer-correctement-ses-allocations-dynamiques
@thaega@oc.todon.fr Bon en fait je dis de la merde (comme @lleofar voulait me le dire avant de supprimer son message ?) je crois. Pour la création d'objet c'est bien de l'allocation dynamique donc il faut faire new et delete.
@Nocta @thaega@oc.todon.fr Oui désolé, c'était pas très clair comme je l'avais formulé la première fois.
@thaega@oc.todon.fr
- soit tu fais de l'allocation dynamique (du genre "int* i = malloc(100*sizeof(int));") et tu dois la libérer toi-même ( "free(i)") sinon tu t'exposes à une fuite mémoire.
Il n'y a pas de système de garbage collector en C++