<?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[Konstruktor bei temporaerem Objekt]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mir gerade einen kleinen Test geschrieben und bin etwas verwundert, warum das temporaere Objekt bei return _a zwar seinen Destruktor abarbeitet, aber nie einen Konstruktor. Kann mir das einer bitte erklaeren?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class A
{
private:
    int foo;
public:
    A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    ~A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
};

class B
{
private:
    int foo;
    A _a;
public:
    B() {  cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    ~B() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
    A get() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):get()&quot; &lt;&lt; endl; return _a; }

};

int main()
{
    {
        cout &lt;&lt; &quot;B b;&quot; &lt;&lt; endl;
        B b;
        cout &lt;&lt; &quot;A a2;&quot; &lt;&lt; endl;
        A a2;
        cout &lt;&lt; &quot;a2 = b.get();&quot; &lt;&lt; endl;
        a2 = b.get();
        cout &lt;&lt; &quot;leave scope&quot; &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>B b;
A(0x7fff5b8fcb34):ctor
B(0x7fff5b8fcb30):ctor
A a2;
A(0x7fff5b8fcb20):ctor
a2 = b.get();
B(0x7fff5b8fcb30):get()
A(0x7fff5b8fcb18):dtor  &lt;-- wo ist dazu der ctor?
leave scope
A(0x7fff5b8fcb20):dtor
B(0x7fff5b8fcb30):dtor
A(0x7fff5b8fcb34):dtor
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/321528/konstruktor-bei-temporaerem-objekt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 03:15:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321528.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Nov 2013 09:01:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor bei temporaerem Objekt on Fri, 15 Nov 2013 09:02:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mir gerade einen kleinen Test geschrieben und bin etwas verwundert, warum das temporaere Objekt bei return _a zwar seinen Destruktor abarbeitet, aber nie einen Konstruktor. Kann mir das einer bitte erklaeren?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class A
{
private:
    int foo;
public:
    A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    ~A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
};

class B
{
private:
    int foo;
    A _a;
public:
    B() {  cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    ~B() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
    A get() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):get()&quot; &lt;&lt; endl; return _a; }

};

int main()
{
    {
        cout &lt;&lt; &quot;B b;&quot; &lt;&lt; endl;
        B b;
        cout &lt;&lt; &quot;A a2;&quot; &lt;&lt; endl;
        A a2;
        cout &lt;&lt; &quot;a2 = b.get();&quot; &lt;&lt; endl;
        a2 = b.get();
        cout &lt;&lt; &quot;leave scope&quot; &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>B b;
A(0x7fff5b8fcb34):ctor
B(0x7fff5b8fcb30):ctor
A a2;
A(0x7fff5b8fcb20):ctor
a2 = b.get();
B(0x7fff5b8fcb30):get()
A(0x7fff5b8fcb18):dtor  &lt;-- wo ist dazu der ctor?
leave scope
A(0x7fff5b8fcb20):dtor
B(0x7fff5b8fcb30):dtor
A(0x7fff5b8fcb34):dtor
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2365609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365609</guid><dc:creator><![CDATA[CppNeuland]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bei temporaerem Objekt on Fri, 15 Nov 2013 09:13:14 GMT]]></title><description><![CDATA[<p>Du loggst ja gar nicht den Kopierkonstruktor (geschweige denn Move-)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365611</guid><dc:creator><![CDATA[Arcoth_]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bei temporaerem Objekt on Fri, 15 Nov 2013 09:19:12 GMT]]></title><description><![CDATA[<p>(Nicht, dass du den Move-Ctor definieren musst, mit dem Copy-Ctor siehst du schon alles)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365612</guid><dc:creator><![CDATA[Arcoth_]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bei temporaerem Objekt on Fri, 15 Nov 2013 09:20:13 GMT]]></title><description><![CDATA[<p>Stimmt, ich dachte mir halt, wo ein dtor ist muss auch ein ctor sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365613</guid><dc:creator><![CDATA[CppNeuland]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor bei temporaerem Objekt on Fri, 15 Nov 2013 09:27:11 GMT]]></title><description><![CDATA[<p>So dank der Ausgabe des Kopiekonstruktors macht es jetzt auch Sinn, danke Arcoth_</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class A
{
private:
    int foo;
public:
    A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    A(const A&amp; a) {  cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):copy ctor&quot; &lt;&lt; endl; }
    ~A() { cout &lt;&lt; &quot;A(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
};

class B
{
private:
    int foo;
    A _a;
public:
    B() {  cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):ctor&quot; &lt;&lt; endl; }
    B(const B&amp; b) {  cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):copy ctor&quot; &lt;&lt; endl; }
    ~B() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):dtor&quot; &lt;&lt; endl; }
    A get() { cout &lt;&lt; &quot;B(&quot; &lt;&lt; this &lt;&lt; &quot;):get()&quot; &lt;&lt; endl; return _a; }

};

int main()
{
    {
        cout &lt;&lt; &quot;B b;&quot; &lt;&lt; endl;
        B b;
        cout &lt;&lt; &quot;A a2;&quot; &lt;&lt; endl;
        A a2;
        cout &lt;&lt; &quot;a2 = b.get();&quot; &lt;&lt; endl;
        a2 = b.get();
        cout &lt;&lt; &quot;leave scope&quot; &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<pre><code>B b;
A(0x7fff5478eb34):ctor
B(0x7fff5478eb30):ctor
A a2;
A(0x7fff5478eb20):ctor
a2 = b.get();
B(0x7fff5478eb30):get()
A(0x7fff5478eb18):copy ctor &lt;-- Da ist die Loesung
A(0x7fff5478eb18):dtor
leave scope
A(0x7fff5478eb20):dtor
B(0x7fff5478eb30):dtor
A(0x7fff5478eb34):dtor
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2365616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365616</guid><dc:creator><![CDATA[CppNeuland]]></dc:creator><pubDate>Fri, 15 Nov 2013 09:27:11 GMT</pubDate></item></channel></rss>