comme le titre le dit,
dans le module serialization de boost je ne comprends pas cette syntaxe :
::new(t)T();
merci de votre aide
Version imprimable
comme le titre le dit,
dans le module serialization de boost je ne comprends pas cette syntaxe :
::new(t)T();
merci de votre aide
C'est pour construire un objet à une adresse mémoire t donnée où on considère que la mémoire aura déjà été allouée.
On appelle ça "placement new".
On l'utiliser par exemple quand on veut allouer beaucoup de mémoire d'un coup et ensuite construire des objets dans cette mémoire déjà toute prete. C'est souvent pour des raisons de performances parceque l'allocation mémoire prends un temps qui peut être considérable parfois.
c'est pas bizarre comme syntaxe ?
fonction()constructeur() ? pour moi il manquait un ;. Il y a de la doc qui traine sur ça svp ?
edit : trouver dans la doc
Merci de ta réponse trés rapide :)
Ce n'est pas une fonction normale, c'est directement lié au language.
Je te conseil de lire la FAQ sur ce point: http://cpp.developpez.com/faq/cpp/?p...sse_specifique
Normalement new c'est :
Là l'instruction new va d'abord allouer la mémoire, puis construire l'objet, le tout "ensemble.Code:Type* objet = new Type( paramattres, de, construction);
Avec placement new tu as:
buffer_memoire étant là où on va construire l'objet, mais new ne ferra pas d'allocation.Code:
1
2 char* buffer_memoire = new char*[ assez_de_memoire ]; // allouer la mémoire Type* objet = new (buffer_memoire) Type( paramattres, de, construction);
et pour le delete, comment cela se passe, il existe un delete de placement ?
Non mais faut appeler explicitement le destructeur. (c'est l'exception qui confirme la règle :p)
Pour plus d'info :
http://www.research.att.com/~bs/bs_f...acement-delete