<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[vector anstelle von new und delete benutzen]]></title><description><![CDATA[<p>Hallo,<br />
ich lese immer wieder in verschiedenen Beiträgen, dass es besser ist, anstelle von new und delete lieber einen container wie vector zu benutzen. Leider habe ich bisher nicht so richtige Beispiele gefunden und komme auch nicht so richtig auf eine Idee wie man folgendes mit einen vector lösen könnte:</p>
<pre><code class="language-cpp">Klasse* erstelle_zeiger() { return new Klasse; }
</code></pre>
<p>Dazu gibt es natürlich auch noch eine Zeiger-löschen Funktion. Wäre natürlich schön, wenn man in dem Block, in dem man sich den Zeiger erstellen lässt, ihn am Blockende nicht wieder händisch löschen muss.<br />
Wie löst man soetwas mit vector? Vielleicht könnt ihr bitte mal ein paar Beispiele geben, so mit new - besser mit vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305384/vector-anstelle-von-new-und-delete-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 23:17:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305384.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jun 2012 18:00:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:00:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich lese immer wieder in verschiedenen Beiträgen, dass es besser ist, anstelle von new und delete lieber einen container wie vector zu benutzen. Leider habe ich bisher nicht so richtige Beispiele gefunden und komme auch nicht so richtig auf eine Idee wie man folgendes mit einen vector lösen könnte:</p>
<pre><code class="language-cpp">Klasse* erstelle_zeiger() { return new Klasse; }
</code></pre>
<p>Dazu gibt es natürlich auch noch eine Zeiger-löschen Funktion. Wäre natürlich schön, wenn man in dem Block, in dem man sich den Zeiger erstellen lässt, ihn am Blockende nicht wieder händisch löschen muss.<br />
Wie löst man soetwas mit vector? Vielleicht könnt ihr bitte mal ein paar Beispiele geben, so mit new - besser mit vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227859</guid><dc:creator><![CDATA[fragender12]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:20:00 GMT]]></title><description><![CDATA[<p>fragender12 schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich lese immer wieder in verschiedenen Beiträgen, dass es besser ist, anstelle von new und delete lieber einen container wie vector zu benutzen. Leider habe ich bisher nicht so richtige Beispiele gefunden und komme auch nicht so richtig auf eine Idee wie man folgendes mit einen vector lösen könnte:</p>
<pre><code class="language-cpp">Klasse* erstelle_zeiger() { return new Klasse; }
</code></pre>
<p>Dazu gibt es natürlich auch noch eine Zeiger-löschen Funktion. Wäre natürlich schön, wenn man in dem Block, in dem man sich den Zeiger erstellen lässt, ihn am Blockende nicht wieder händisch löschen muss.<br />
Wie löst man soetwas mit vector? Vielleicht könnt ihr bitte mal ein paar Beispiele geben, so mit new - besser mit vector?</p>
</blockquote>
<p>Hier benutzt man nicht Vector, schließlich willst du kein Array. Hier würde ich empfehlen einfach ein Stackobjekt zurückzugeben; Falls es aber umbedingt notwendig ist (und es muss schon verdammt notwendig sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ), nimm einen <code>[s]shared_ptr[/s]</code>  <code>unique_ptr</code> (aufgrund wiederholter subtiler Meckereien editiere ich jetzt).</p>
<p>Beispiel wo vector sehr gut ist:</p>
<p>so mit new:</p>
<pre><code class="language-cpp">int* meins = new int[ eingeleseneVariable ];
</code></pre>
<p>so mit <code>std::vector</code> :</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; meins(eingeleseneVariable);
</code></pre>
<pre><code class="language-cpp">int* getArray()
{
    return new int[ eineAndereVariable ];//Achtung, Größe unbekannt für Funktionsaufrufer, erzwingt magic constants
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code class="language-cpp">std::vector&lt;int&gt; getArray()
{
    return std::vector&lt;int&gt;( eineAndereDuweistschon );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2227860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227860</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:04:55 GMT]]></title><description><![CDATA[<p>vector ist was für Arrays, nicht für einzelne Objekte. Du suchst einen Smartpointer.</p>
<p>Die wahre Frage ist: Was willst du mit dem Konstrukt erreichen? Polymorph ist die Klasse offensichtlich nicht, wieso dann überhaupt new?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227862</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:14:34 GMT]]></title><description><![CDATA[<p>Nein, vector will man statt new[] und delete[]. Für new und delete nimmt man smart Pointer wie shared_ptr oder unique_ptr. (Wenn du nicht weißt was shared_ptr ist oder macht, brauchst du ihn auch nicht.)</p>
<pre><code class="language-cpp">std::unique_ptr&lt;Klasse&gt; foo() { return std::unique_ptr&lt;Klasse&gt;(new Klasse); }
</code></pre>
<p>Der übernimmt das delete nämlich für dich. Move-Semantiken sollten dir allerdings klar sein. (std::move etc.) (Die sind erst mit C++11 verfügbar, bei GCC musst du da eventuell mit -std=c++0x oder -std=c++11 kompilieren.)</p>
<p>Edit: oO Viel zu spät.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Die wahre Frage ist: Was willst du mit dem Konstrukt erreichen? Polymorph ist die Klasse offensichtlich nicht, wieso dann überhaupt new?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227864</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:07:43 GMT]]></title><description><![CDATA[<p>Es muss kein vector sein. Hatte ich nur am meisten als Ersatz gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227865</guid><dc:creator><![CDATA[fragender12]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:09:32 GMT]]></title><description><![CDATA[<p>fragender12 schrieb:</p>
<blockquote>
<p>Es muss kein vector sein. Hatte ich nur am meisten als Ersatz gelesen.</p>
</blockquote>
<p>Gut, Antworten siehst du ja oben. Speicher überhaupt selbst zu allokieren sollte wo möglich (auch an refactoring denken, wenn man unnötig oft davon abhängig ist) immer vermieden werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227867</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:09:32 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 18:12:05 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Falls es aber umbedingt notwendig ist (und es muss schon verdammt notwendig sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ), nimm einen <s>shared_ptr</s> unique_ptr.</p>
</blockquote>
<p>*fixed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227869</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 27 Jun 2012 18:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 19:57:04 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Falls es aber umbedingt notwendig ist (und es muss schon verdammt notwendig sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ), nimm einen <s>shared_ptr</s> unique_ptr.</p>
</blockquote>
<p>*fixed</p>
</blockquote>
<p>Kommt doch auf den Verwendungszweck an. Zumindest war &quot;auto_ptr&quot; nicht zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227915</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Wed, 27 Jun 2012 19:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Wed, 27 Jun 2012 20:03:56 GMT]]></title><description><![CDATA[<p>Per default shared_ptr zu nehmen ist Schwachsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227921</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 27 Jun 2012 20:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to vector anstelle von new und delete benutzen on Thu, 28 Jun 2012 14:43:13 GMT]]></title><description><![CDATA[<p>Danke.<br />
In den meisten von mir gesehen Beiträgen ging es um c-Arrays. Da würde ich sowieso immer container nehmen. Nur das mit dem vector statt new verwirrte mich. Aber jetzt bin ich da auch wieder ein wenig wissender.<br />
In den anfangs von mir verwendeten Beispiel habe ich mich für unique_ptr entschieden. Habe es auch schon ausprobiert und funktioniert so wie ich es mir vorstellte.<br />
Es sieht jetzt so aus:</p>
<pre><code class="language-cpp">std::unique_ptr&lt;KlasseBasis&gt; foo() { return std::unique_ptr&lt;KlasseBasis&gt;(new KlasseAbgel); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2228183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228183</guid><dc:creator><![CDATA[fragender12]]></dc:creator><pubDate>Thu, 28 Jun 2012 14:43:13 GMT</pubDate></item></channel></rss>