 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Sebastian Pfützner Guest
|
Posted: Sun Mar 13, 2005 7:56 pm Post subject: Speicher von vector freigeben |
|
|
Hallo,
Wenn man z.B. die folgende Variable hat:
vector<int> v;
und diesen vector dann füllt und später wieder den speicher freigeben
möchte, welche der folgenden Möglichkeiten sollte man wählen? Bzw. was
ist überhaupt der Unterschied zwischen diesen?
1. v.clear();
2. v.resize(0);
3. {vector<int>().swap(v)}
Ich möchte dabei den Speicher wirklich freigeben und nicht nur die Größe
des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich umständlich
und häßlich...
--
Sebastian Pfützner
[email]s.pfuetzner (AT) onlinehome (DOT) de[/email]
ICQ-ID: 39965036
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Sun Mar 13, 2005 9:14 pm Post subject: Re: Speicher von vector freigeben |
|
|
Sebastian Pfützner wrote:
| Quote: |
und diesen vector dann füllt und später wieder den speicher freigeben
möchte, welche der folgenden Möglichkeiten sollte man wählen? Bzw. was
ist überhaupt der Unterschied zwischen diesen?
1. v.clear();
|
clear entfernt alle Elemente aus dem Vector, gibt aber den Speicher
nicht frei. Nur die Elemente werden zerstört.
Ist das selbe wie clear.
| Quote: | 3. {vector<int>().swap(v)}
Ich möchte dabei den Speicher wirklich freigeben und nicht nur die Größe
des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich umständlich
und häßlich...
|
Ja, 3 macht was du willst. 1 & 2 löschen nur die Elemente geben aber
keinen Speicher frei.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Philipp Bachmann Guest
|
Posted: Mon Mar 14, 2005 11:39 am Post subject: Re: Speicher von vector freigeben |
|
|
| Quote: | 3. {vector<int>().swap(v)}
|
Wie Christoph schon geschrieben hat, ist dies zuverlaessig.
Aber warum beschraenkst Du nicht einfach den Scope der Instanz auf den Abschnitt in Deiner Anwendung, wo Du sie wirklich benoetigst?
Der Swap-Trick tut - zugegebenermassen in der Tat umstaendlich - auch nichts anderes, als auszunutzen, dass der (temporaere) Vektor
deterministisch und sofort zerstoert wird. Wenn die Instanz viel laenger leben muss als ihr Inhalt (weil Du vermutlich irgendwann
sie neu fuellen willst), ist "std::vector<>" vielleicht auch der falsche Container. Je nach Interface kommen mir da z.B.
"std::deque<>" oder "std::map< std::size_t,X >" in den Sinn.
Cheers,
Philipp.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Edzard Egberts Guest
|
Posted: Mon Mar 14, 2005 5:36 pm Post subject: Re: Speicher von vector freigeben |
|
|
| Quote: |
3. {vector<int>().swap(v)}
Ich möchte dabei den Speicher wirklich freigeben und nicht nur die
Größe des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich
umständlich und häßlich...
|
4. Eine Zuweisung müsste doch auch gehen, so in der Art
v= vector<int>(0);
Gruß,
Ed
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Bartoschek Guest
|
Posted: Mon Mar 14, 2005 8:48 pm Post subject: Re: Speicher von vector freigeben |
|
|
Edzard Egberts wrote:
| Quote: |
3. {vector<int>().swap(v)}
Ich möchte dabei den Speicher wirklich freigeben und nicht nur die
Größe des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich
umständlich und häßlich...
4. Eine Zuweisung müsste doch auch gehen, so in der Art
v= vector<int>(0);
|
Das wird nicht funktionieren, da hier v nur die Elemente des temporären
vector zugeordnet werden, ohne dass v seinen Speicher beim Allokator
freigibt.
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|