<?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[Reference member: wieso ruft Konstruktor Destruktor auf?]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstring&gt;

class Data
{
    private:
        char* filename;
        unsigned int m_data_length;

    public:
        Data(char*);
        virtual ~Data();
};

Data::Data(char* fn)
{
    std::cout &lt;&lt; &quot;Data construktor\n&quot;;
    filename = new char[strlen(fn) + 1];
    strcpy(filename, fn);
    filename[strlen(fn)] = '\0';
}

Data::~Data()
{
    std::cout &lt;&lt; &quot;Data destructor\n&quot;;
}

class Agent
{
    private:
        Data&amp; input;
        Data&amp; output;

    public:
        Agent(Data i, Data o);
        ~Agent();
};

Agent::Agent(Data i, Data o): input(i), output(o)
{
    std::cout &lt;&lt; &quot;Agent Konstruktor\n&quot;;
}

Agent::~Agent()
{
    std::cout &lt;&lt; &quot;Agent Destruktor\n&quot;;
}

int main()
{
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    Data* d1 = new Data(&quot;test1&quot;);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    Data* d2 = new Data(&quot;test2&quot;);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;

    Agent* f = new Agent(*d1, *d2);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;

    delete f;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    delete d2;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    delete d1;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Ich moechte gerne verstehen, wieso am Ende des Agent Konstruktors die Destruktoren von d1 und d2 aufgerufen werden, und ob ich da voelligen Bloedsinn veranstalte. Wie geht man dann richtig mit reference members um, wenn es eben Referenzen und keine Zeiger sein sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141107/reference-member-wieso-ruft-konstruktor-destruktor-auf</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 11:05:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141107.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Mar 2006 12:12:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reference member: wieso ruft Konstruktor Destruktor auf? on Sun, 19 Mar 2006 12:12:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstring&gt;

class Data
{
    private:
        char* filename;
        unsigned int m_data_length;

    public:
        Data(char*);
        virtual ~Data();
};

Data::Data(char* fn)
{
    std::cout &lt;&lt; &quot;Data construktor\n&quot;;
    filename = new char[strlen(fn) + 1];
    strcpy(filename, fn);
    filename[strlen(fn)] = '\0';
}

Data::~Data()
{
    std::cout &lt;&lt; &quot;Data destructor\n&quot;;
}

class Agent
{
    private:
        Data&amp; input;
        Data&amp; output;

    public:
        Agent(Data i, Data o);
        ~Agent();
};

Agent::Agent(Data i, Data o): input(i), output(o)
{
    std::cout &lt;&lt; &quot;Agent Konstruktor\n&quot;;
}

Agent::~Agent()
{
    std::cout &lt;&lt; &quot;Agent Destruktor\n&quot;;
}

int main()
{
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    Data* d1 = new Data(&quot;test1&quot;);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    Data* d2 = new Data(&quot;test2&quot;);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;

    Agent* f = new Agent(*d1, *d2);

    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;

    delete f;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    delete d2;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    delete d1;
    std::cout &lt;&lt; __LINE__ &lt;&lt; std::endl;
    return 0;
}
</code></pre>
<p>Ich moechte gerne verstehen, wieso am Ende des Agent Konstruktors die Destruktoren von d1 und d2 aufgerufen werden, und ob ich da voelligen Bloedsinn veranstalte. Wie geht man dann richtig mit reference members um, wenn es eben Referenzen und keine Zeiger sein sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019581</guid><dc:creator><![CDATA[tim_g]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to Reference member: wieso ruft Konstruktor Destruktor auf? on Sun, 19 Mar 2006 12:20:37 GMT]]></title><description><![CDATA[<p>weil du an den konstruktor von Agent kopien von Data uebergibts (Agent(Data i, Data o) )<br />
diese werden nach dem konstruktoraufruf natuerlich wieder zerstoert.<br />
mach halt zeiger oder referenzen draus.</p>
<pre><code class="language-cpp">Agent(Data* i, Data* o) //oder
Agent(Data&amp; i, Data&amp; o)

Agent* f = new Agent(*d1, *d2);//referenzen
Agent* f = new Agent(d1, d2);  //zeiger
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1019584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019584</guid><dc:creator><![CDATA[Cpt. Tanga]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:20:37 GMT</pubDate></item></channel></rss>