Relocalisation triviale Qt et C++ (Partie 1)

Le récipient Des classes introduit dans Qt 4 (Tulipe, pour le amateurs) avait un intéressant optimisation: le capacité à tourner certain opérations sur le contenu objets dans niveau octet manipulations.

Exemple: vecteur réaffectation

Considérer le réaffectation de un QVecteur : quand le vecteur est complet et nous vouloir à insérer un nouveau valeur (de taper T), le vecteur a à allouer un plus gros bloc de mémoire.

Simplifier, le chemin ce est fait pour un générique taper T est :

Allouer un plus gros bloc de mémoire. Déplacer-construire le T objets depuis le actuel stockage dans le nouveau mémoire.

Éléments sont être déplacé. Le rouge, souligné éléments dans le source représenter bouger de objets. C volonté être déplacé ensuite.

Détruire le bouger de objets dans vieux actuel stockage. Désallouer le vieux bloc de mémoire. Mise à jour Tenue de livre compte (ajuster données aiguille, taille, capacité, comme nécessaire).

Dans pseudocode, ce regards quelque chose comme ceci :

modèle vecteur ::reallocate_impl(size_t new_capacity) { assert(m_size

Relocalisation triviale Qt et C++ (Partie 1)

Le récipient Des classes introduit dans Qt 4 (Tulipe, pour le amateurs) avait un intéressant optimisation: le capacité à tourner certain opérations sur le contenu objets dans niveau octet manipulations.

Exemple: vecteur réaffectation

Considérer le réaffectation de un QVecteur : quand le vecteur est complet et nous vouloir à insérer un nouveau valeur (de taper T), le vecteur a à allouer un plus gros bloc de mémoire.

Simplifier, le chemin ce est fait pour un générique taper T est :

Allouer un plus gros bloc de mémoire. Déplacer-construire le T objets depuis le actuel stockage dans le nouveau mémoire.

Éléments sont être déplacé. Le rouge, souligné éléments dans le source représenter bouger de objets. C volonté être déplacé ensuite.

Détruire le bouger de objets dans vieux actuel stockage. Désallouer le vieux bloc de mémoire. Mise à jour Tenue de livre compte (ajuster données aiguille, taille, capacité, comme nécessaire).

Dans pseudocode, ce regards quelque chose comme ceci :

modèle vecteur ::reallocate_impl(size_t new_capacity) { assert(m_size

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow