<?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[Stack Freigabe]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann folgendes (sinnvoll) funktionieren?:</p>
<pre><code class="language-cpp">class B
{
public:
    A meth()
    {
        A a = A();
        a.do();

        return a; //wird a hier schon aus dem Stack entfernt?! bzw. Wann wird es entfernt
    }
};

int main()
{
    B b;
    A a = B.meth();
    // ...can I use a here?!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/283401/stack-freigabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 04:32:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283401.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Mar 2011 07:20:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 07:20:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann folgendes (sinnvoll) funktionieren?:</p>
<pre><code class="language-cpp">class B
{
public:
    A meth()
    {
        A a = A();
        a.do();

        return a; //wird a hier schon aus dem Stack entfernt?! bzw. Wann wird es entfernt
    }
};

int main()
{
    B b;
    A a = B.meth();
    // ...can I use a here?!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032555</guid><dc:creator><![CDATA[RandomQuestion]]></dc:creator><pubDate>Fri, 11 Mar 2011 07:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 07:33:35 GMT]]></title><description><![CDATA[<p>ja es funktioniert</p>
<p>weil eine kopie zurückgegeben wird<br />
und an dem punkt musst du gucken ob es auch einen copy contruktor und einen zuweisungs operator gibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032561</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 11 Mar 2011 07:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 07:42:03 GMT]]></title><description><![CDATA[<p>Ah ok, da liegt also der Hase begraben... Ich brauche wahrscheinlich einen Copy Konstruktor?! wie würde der von folgender Klasse aussehen?</p>
<pre><code class="language-cpp">class C;
class A
{
public:
    C* c;
    A ()
    {
        name = &quot;test&quot;;
        c = new C();
    }
private:
    string name;
};
</code></pre>
<p>Was ist ein Zuweisungs Operator?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032567</guid><dc:creator><![CDATA[RandomQuestion]]></dc:creator><pubDate>Fri, 11 Mar 2011 07:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 07:45:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class A
{
   // ...
   A(A const &amp; other)
    : name(other.name), c(new C(other.c))
   {
   }
   // ...
};
</code></pre>
<p>aber jetzt hast du das prblem verschoben und du brauchst einen sinnvollen copy CTor in C...</p>
<p>das sit ein schlechtes beispiel was du jetzt wolltest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032571</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 11 Mar 2011 07:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 07:55:44 GMT]]></title><description><![CDATA[<p>RandomQuestion schrieb:</p>
<blockquote>
<p>Ah ok, da liegt also der Hase begraben... Ich brauche wahrscheinlich einen Copy Konstruktor?! wie würde der von folgender Klasse aussehen?</p>
</blockquote>
<p>Das kommt darauf an, ob eine Kopie einer A Instanz eine neue C Kopie erhalten soll, oder auf die selbe Instanz verwiesen soll. Im zweiten Fall stellt sich die Frage wer die Instanz dann löscht. Um sich die Arbeit zu erleichern, sollte man in so einem Fall dann einen <code>std::shared_ptr&lt;C&gt;</code> verwenden. Der compilergenerietre Kopierkonstrujktor und Zuweisungsopertor, wäre dann für A ausreichend.<br />
Im ersten Fall sieht A z.B. so aus</p>
<pre><code class="language-cpp">class C
{ 
public:
    C(int i) : n(i) {}
    int n; 
};

class A
{
public:
    A(int i) : c_(new C(i)) {}

    A(const A&amp; other) : c_(new C(other.c_-&gt;n)) {}

    // zuweisungs operator
    A&amp; operator=(A other)
    {
        // copy swap
        other.Swap(*this);
        return *this;
    }

    void Swap(A&amp; other)
    {
        std::swap(c_, other.c_);
    }

    C* c_;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032578</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 11 Mar 2011 07:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 08:38:01 GMT]]></title><description><![CDATA[<p>Den Copy-Constructor finde ich nicht gut. Bei deiner Klasse C funktioniert der zwar, es geht aber sofort in die Hose wenn C weitere Member bekommt. Warum nicht den Copy-Konstruktor von C aufrufen.</p>
<pre><code class="language-cpp">A(const A&amp; other) : c_(new C(*other.c_)) {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2032598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032598</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 11 Mar 2011 08:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 08:43:37 GMT]]></title><description><![CDATA[<p>Warum wird C überhaupt dynamisch erzeugt? Ist es zu groß für den Stack?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032600</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 11 Mar 2011 08:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 08:44:31 GMT]]></title><description><![CDATA[<p>Ja das stimmt. Ich war einfach zu faul C noch einen Copy Ctor zu verpassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032601</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 11 Mar 2011 08:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 08:55:45 GMT]]></title><description><![CDATA[<p>Deine C-Version hat ja schon einen funktionierenden CopyKonstruktor. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Warum wird C überhaupt dynamisch erzeugt? Ist es zu groß für den Stack?</p>
</blockquote>
<p>Nur als Beispiel für den OP.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032604</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 11 Mar 2011 08:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 08:58:48 GMT]]></title><description><![CDATA[<p>ohje ja, häm.. da war ich wohl jetzt einfach leicht verwirrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032606</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 11 Mar 2011 08:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Fri, 11 Mar 2011 09:27:19 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Deine C-Version hat ja schon einen funktionierenden CopyKonstruktor. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ja eben. Eine Klasse hat doch von Haus aus erst mal immer einen Copykonstruktor und einen Zuweisungsoperator.<br />
Deswegen ist:</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>und an dem punkt musst du gucken ob es auch einen copy contruktor und einen zuweisungs operator gibt</p>
</blockquote>
<p>etwas zu schnell geschossen. Es ist doch zuerst mal zu überprüfen, ob die betreffende Klasse Speicher auf dem Heap allokiert, denn anderenfalls reicht die standardmäßige Flatcopy aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032617</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 11 Mar 2011 09:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 16 Mar 2011 12:30:43 GMT]]></title><description><![CDATA[<p>Danke für die Antworten. Leider habe ich etwas Probleme mit der Schreibweise wie hier zum Beispiel:</p>
<p>brotbernd schrieb:</p>
<blockquote>
<pre><code class="language-cpp">C(int i) : n(i) {}
</code></pre>
</blockquote>
<p>Ich weiß leider nicht wie ich das &quot;lesen&quot; kann. Bei google weiß ich leider nicht, nach was ich suchen sollte...</p>
<p>Leider weiß ich auch noch nicht, was ein Zuweisungsoperator genau macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2035004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2035004</guid><dc:creator><![CDATA[RandomQuestion]]></dc:creator><pubDate>Wed, 16 Mar 2011 12:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 16 Mar 2011 15:01:52 GMT]]></title><description><![CDATA[<p>n wird mit i initialisiert, mehr ist das nicht.</p>
<p>Vorteil an dieser Schreibweise ist, dass du z.B. auch Konstanten initialisieren kannst. Wenn du die Zuweisung im Rumpf des ctors machst, geht das nämlich nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2035125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2035125</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 16 Mar 2011 15:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 16 Mar 2011 15:59:49 GMT]]></title><description><![CDATA[<p>RandomQuestion schrieb:</p>
<blockquote>
<p>Bei google weiß ich leider nicht, nach was ich suchen sollte...</p>
</blockquote>
<p>nach &quot;Initialisierungsliste&quot;, so heißt der Teil nach dem Doppelpunkt und vor der geschweiften Klammer.</p>
<blockquote>
<p>Leider weiß ich auch noch nicht, was ein Zuweisungsoperator genau macht?</p>
</blockquote>
<p>er sorgt dafür, dass nach a=b a äquivalent ist zu b. (zumindest sollte er das) Bei eingebauten Datentypen gibts den schon frei Haus:</p>
<pre><code class="language-cpp">int i(5); //i wird mit 5 initialisiert
i = 12; //Zuweisung, i ist jetzt 12
</code></pre>
<p>Bei zusammengesetzten Datentypen kann der Compiler den operator= automatisch generieren, wenn alle Member einen operator= haben:</p>
<pre><code class="language-cpp">struct St 
{
  int i;
  double d;
};

St s;
s.i = 5;
s.d = 6;

St s2;
s2.i = 13;
s2.d = 14;

s = s2; //Zuweisung: s.i wird s2.i zugewiesen, s.d wird s2.d zugewiesen
</code></pre>
<p>Wenn die automatische Zuweisung aber nicht das richtige macht (z.B. wenn ein Member ein Pointer auf Speicher ist, der dem Objekt gehört und vonihm verwaltet wird), muss man den operator selber schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2035193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2035193</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 16 Mar 2011 15:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 13:34:39 GMT]]></title><description><![CDATA[<p>Würde dies als Copy Constructor funktionieren?</p>
<pre><code class="language-cpp">class A
{
    A::A(const A&amp; other)
    :   var1(other.var1),
        var2(other.var2),
        var3(new C(*other.var3)),
        var4(other.var4),    // hier soll keine Kopie erzeugt werden, sondern auf die gleiche Instanz verwiesen werden. Passt das so?
        var5(other.var5)
    {
    }
    std::string var1;
    bool var2
    C* var3;
    D* var4;
    std::list&lt;std::string&gt; var5;
};
</code></pre>
<p>Ist ein Zuweisungsoperator damit eine weitere Funktion oder habe ich das mit dem Copy Konstruktor abgehackt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038741</guid><dc:creator><![CDATA[RandomQuestion]]></dc:creator><pubDate>Wed, 23 Mar 2011 13:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 14:10:25 GMT]]></title><description><![CDATA[<p>Zuweisungsoperator ist ne weitere Funktion.</p>
<pre><code class="language-cpp">A operator=(const A&amp; other) {}
</code></pre>
<p>Copy-Ctor ist dafür da wenn du sagst &quot;Ich hab hier ein A-Objekt, mach mir bitte noch ein A-Objekt mit Hilfe des ersten&quot;. Zuweisungsoperator heißt &quot;Ich habe zwei A-Objekte, mach bitte dass das erste genauso aussieht wie das zweite.&quot;</p>
<p>Von der funktionalität ist es sehr ähnlich, so ähnlich das der copy-ctor manchmal einfach mit</p>
<pre><code class="language-cpp">A(const A&amp; other) 
{
*this = other;
}
</code></pre>
<p>implementiert wird. Gibt Gründe die dafür und dagegen sprechen das so zu machen.</p>
<p>Bei deinem copy-ctor sehe ich atm das Problem, das du wieder eine bloße Kopie von D* var4 machst, anders als bei var3. Nur vergessen, oder ist das Absicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038780</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Wed, 23 Mar 2011 14:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 14:12:36 GMT]]></title><description><![CDATA[<p>Sollte natürlich</p>
<pre><code class="language-cpp">A&amp; operator=(const A&amp; other)
</code></pre>
<p>heißen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038783</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Wed, 23 Mar 2011 14:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 14:18:25 GMT]]></title><description><![CDATA[<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Bei deinem copy-ctor sehe ich atm das Problem, das du wieder eine bloße Kopie von D* var4 machst, anders als bei var3. Nur vergessen, oder ist das Absicht?</p>
</blockquote>
<p>Der Kommentar in Zeile 7 schreit doch ganz laut &quot;Absicht&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038786</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 Mar 2011 14:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 14:19:52 GMT]]></title><description><![CDATA[<p>ich = blind (Hausaufgabe: implementiere passenden Zuweisungsoperator für diese Zuweisung.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038787</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Wed, 23 Mar 2011 14:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Wed, 23 Mar 2011 14:44:34 GMT]]></title><description><![CDATA[<p>Oft wird der op= auch als T&amp; operator = (T); implementiert, siehe Copy &amp; Swap Idiom.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2038808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2038808</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 23 Mar 2011 14:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Mon, 28 Mar 2011 06:50:35 GMT]]></title><description><![CDATA[<p>Wäre das dann schon mein Zuweisungsoperator (wenn der Copy Konstruktor schon wie oben existiert)?</p>
<pre><code class="language-cpp">A&amp; operator=(const A&amp; other)
{
    return A(other);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2041109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041109</guid><dc:creator><![CDATA[RandomQuestion]]></dc:creator><pubDate>Mon, 28 Mar 2011 06:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Freigabe on Mon, 28 Mar 2011 09:09:35 GMT]]></title><description><![CDATA[<p>Der ist schlecht, du kannst doch nicht einfach ein lokal erstelltes Objekt als Referenz zurückgeben.</p>
<p>Der Zuweisungsoperator soll die Attribute des Objekts dem this-Objekt zuweisen und anschließend *this zurückgeben, so ist das gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041167</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 09:09:35 GMT</pubDate></item></channel></rss>