les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Il sont libérés.
-- Franck Branjonneau
Sébastien Guérif
vector< A > x; vector< A > y;
.../... // les vector x et y; sont remplis .../...
x = y;
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Les objets de x sont détruits et la mémoire qui eur était allouée estlibérée ssi le destructeur de la classe libère correctement la mémoire allouée dynamiquement (en cas d'usage direct ou indirect de "new")
Hope this helps! Sébastien
vector< A > x;
vector< A > y;
.../...
// les vector x et y; sont remplis
.../...
x = y;
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Les objets de x sont détruits et la mémoire qui eur était allouée
estlibérée ssi le destructeur de la classe libère correctement la
mémoire allouée dynamiquement (en cas d'usage direct ou indirect de "new")
.../... // les vector x et y; sont remplis .../...
x = y;
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Les objets de x sont détruits et la mémoire qui eur était allouée estlibérée ssi le destructeur de la classe libère correctement la mémoire allouée dynamiquement (en cas d'usage direct ou indirect de "new")
Hope this helps! Sébastien
James Kanze
On Apr 9, 9:38 pm, "Bruno Causse" wrote:
j'ai deux vector d'objet de meme nature
vector< A > x; vector< A > y;
.../... les vector x et y; sont remplis .../...
x = y;
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Libérés dans quel sens ? Dans une implémentation « normale », je crois, beaucoup va dépendre des tailles rélatives des deux vecteurs, ainsi que la capacité d'x. Grosso modo, ce auquel je m'attendrais, c'est que si x.capacity() < y.size(), les min(x.size(),y.size()) éléments seront affectés ; s'il en reste des éléments en x, ils seront détruit (appel du destructeur), tandis que s'il en reste dans y, ils seront copié (appel du constructeur de copie). Tant que la capacité de x suffit (qu'elle est inférieur à la taille de y), en revanche, la bibliothèque n'a pas le droit de libérer.
Si en revanche la capacité d'x ne suffit pas, oui, tous les destructeurs des éléments d'x seront appelés, la mémoire libérée, et ensuite un nouveau bloc, plus grand, alloué, et les éléments y copiés.
Ensuite, évidemment, c'est à toi d'écire le constructeur de copie, l'opérateur d'affectation et le destructeur qu'il faut.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Apr 9, 9:38 pm, "Bruno Causse" <bcau...@lepoint.tm.fr> wrote:
j'ai deux vector d'objet de meme nature
vector< A > x;
vector< A > y;
.../...
les vector x et y; sont remplis
.../...
x = y;
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Libérés dans quel sens ? Dans une implémentation « normale »,
je crois, beaucoup va dépendre des tailles rélatives des deux
vecteurs, ainsi que la capacité d'x. Grosso modo, ce auquel je
m'attendrais, c'est que si x.capacity() < y.size(), les
min(x.size(),y.size()) éléments seront affectés ; s'il en reste
des éléments en x, ils seront détruit (appel du destructeur),
tandis que s'il en reste dans y, ils seront copié (appel du
constructeur de copie). Tant que la capacité de x suffit
(qu'elle est inférieur à la taille de y), en revanche, la
bibliothèque n'a pas le droit de libérer.
Si en revanche la capacité d'x ne suffit pas, oui, tous les
destructeurs des éléments d'x seront appelés, la mémoire
libérée, et ensuite un nouveau bloc, plus grand, alloué, et les
éléments y copiés.
Ensuite, évidemment, c'est à toi d'écire le constructeur de
copie, l'opérateur d'affectation et le destructeur qu'il faut.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
les anciens objets de x sont ils liberés? (ou ai je une fuite?)
Libérés dans quel sens ? Dans une implémentation « normale », je crois, beaucoup va dépendre des tailles rélatives des deux vecteurs, ainsi que la capacité d'x. Grosso modo, ce auquel je m'attendrais, c'est que si x.capacity() < y.size(), les min(x.size(),y.size()) éléments seront affectés ; s'il en reste des éléments en x, ils seront détruit (appel du destructeur), tandis que s'il en reste dans y, ils seront copié (appel du constructeur de copie). Tant que la capacité de x suffit (qu'elle est inférieur à la taille de y), en revanche, la bibliothèque n'a pas le droit de libérer.
Si en revanche la capacité d'x ne suffit pas, oui, tous les destructeurs des éléments d'x seront appelés, la mémoire libérée, et ensuite un nouveau bloc, plus grand, alloué, et les éléments y copiés.
Ensuite, évidemment, c'est à toi d'écire le constructeur de copie, l'opérateur d'affectation et le destructeur qu'il faut.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34