<?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[Destruktoreinsatz korrekt?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes vorliegen:</p>
<pre><code class="language-cpp">namespace BankSimulation
{
    class Transaction
    {
        private:
        Account const* firstAccount;
        Account const* secondAccount;
        float money;
        public:
            Transaction(Account const* firstAccount,Account const* secondAccount,float value);
            ~Transaction();
            void print(std::ostream&amp; os) const;
    };

}
</code></pre>
<p>Und die implementation</p>
<pre><code class="language-cpp">BankSimulation::Transaction::Transaction(Account const* firstAccount,Account const* secondAccount, float money)
{
    this-&gt;firstAccount = firstAccount;
    this-&gt;secondAccount = secondAccount;
    this-&gt;money = money;
}
BankSimulation::Transaction::~Transaction()
{
    delete this-&gt;firstAccount;
    delete this-&gt;secondAccount;
}
void BankSimulation::Transaction::print(std::ostream&amp; os) const
{
    os&lt;&lt;this-&gt;firstAccount-&gt;getAccountId()&lt;&lt;&quot;-&gt;&quot;&lt;&lt;this-&gt;secondAccount-&gt;getAccountId()&lt;&lt;std::endl;
}
</code></pre>
<p>Wenn ich in der main nun folgendes mache:</p>
<pre><code class="language-cpp">int main()
{
    Account *a = new Account(100,100);
    Account *b = new Account(100,100);

    Transaction t(a,b,100);

    std::cout&lt;&lt;t&lt;&lt;std::endl;

    return 0;
}
</code></pre>
<p>Ist es dann legitim die Zeiger auf die Accounts im Transaction Destruktor zu deleten oder sollte ich das doch in der Main machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289824/destruktoreinsatz-korrekt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 21:46:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289824.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jul 2011 14:51:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 14:51:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes vorliegen:</p>
<pre><code class="language-cpp">namespace BankSimulation
{
    class Transaction
    {
        private:
        Account const* firstAccount;
        Account const* secondAccount;
        float money;
        public:
            Transaction(Account const* firstAccount,Account const* secondAccount,float value);
            ~Transaction();
            void print(std::ostream&amp; os) const;
    };

}
</code></pre>
<p>Und die implementation</p>
<pre><code class="language-cpp">BankSimulation::Transaction::Transaction(Account const* firstAccount,Account const* secondAccount, float money)
{
    this-&gt;firstAccount = firstAccount;
    this-&gt;secondAccount = secondAccount;
    this-&gt;money = money;
}
BankSimulation::Transaction::~Transaction()
{
    delete this-&gt;firstAccount;
    delete this-&gt;secondAccount;
}
void BankSimulation::Transaction::print(std::ostream&amp; os) const
{
    os&lt;&lt;this-&gt;firstAccount-&gt;getAccountId()&lt;&lt;&quot;-&gt;&quot;&lt;&lt;this-&gt;secondAccount-&gt;getAccountId()&lt;&lt;std::endl;
}
</code></pre>
<p>Wenn ich in der main nun folgendes mache:</p>
<pre><code class="language-cpp">int main()
{
    Account *a = new Account(100,100);
    Account *b = new Account(100,100);

    Transaction t(a,b,100);

    std::cout&lt;&lt;t&lt;&lt;std::endl;

    return 0;
}
</code></pre>
<p>Ist es dann legitim die Zeiger auf die Accounts im Transaction Destruktor zu deleten oder sollte ich das doch in der Main machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092353</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 13 Jul 2011 14:51:28 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 14:56:56 GMT]]></title><description><![CDATA[<p>Das <em>darfst</em> du tun, halte ich aber für keine gute Idee, da man deine Transaktion dann nur mit Heap-Objekten benutzen kann. Und gibt es einen guten Grund dafür? Von einer Transaktion erwarte ich nicht, dass sie mir das Konto auflöst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092355</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 13 Jul 2011 14:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 14:58:17 GMT]]></title><description><![CDATA[<p>Das ist hier eigentlich die Aufgabe der main. Da du da auch die new's hast.</p>
<p>Stell dir dazu z.B vor, dass jemand das hier macht:</p>
<pre><code class="language-cpp">int main()
{
    Account a = Account(100,100);
    Account b = Account(100,100);

    Transaction t(&amp;a,&amp;b,100);

    std::cout&lt;&lt;t&lt;&lt;std::endl;

    return 0;
}
</code></pre>
<p>Und das ist sogar sehr wahrscheinlich. Wenn du da dann delete auf den Speicher aufrufst, dann hast du ein Problem.</p>
<p>Auch in der Klasse würde ich keine Zeiger benutzen, sondern Referenzen.</p>
<pre><code class="language-cpp">class Transaction
    {
        private:
        Account const&amp; firstAccount;
        Account const&amp; secondAccount;
        float money;
        public:
            Transaction(Account const&amp; firstAccount,Account const&amp; secondAccount,float value);
            ~Transaction();
            void print(std::ostream&amp; os) const;
    };
...
BankSimulation::Transaction::Transaction(Account const&amp; firstAccount_,Account const&amp; secondAccount_, float money)
:
firstAccount(firstAccount_),
secondAccount(secondAccount_)
{
    this-&gt;money = money;
}
BankSimulation::Transaction::~Transaction()
{
 // destruktor braucht man eigentlich gar nicht mehr
}
void BankSimulation::Transaction::print(std::ostream&amp; os) const
{
    os&lt;&lt;this-&gt;firstAccount.getAccountId()&lt;&lt;&quot;-&gt;&quot;&lt;&lt;this-&gt;secondAccount.getAccountId()&lt;&lt;std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2092356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092356</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 13 Jul 2011 14:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 14:58:46 GMT]]></title><description><![CDATA[<p>Das ist natürlich nen Gutes Argument. Da hab ich so sehr an das Bereinigen des Speichers gedacht das ich den Semantischen Aspekt komplett vergessen hab.</p>
<p>Dank dir, dann werd ich das ohne Const-Pointer machen und da nur Stack-Objekte reingeben.</p>
<p>Man wie doof muss man sein:) Danke <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/2092357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092357</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 13 Jul 2011 14:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 15:33:49 GMT]]></title><description><![CDATA[<p>Warum ist <code>Transaction</code> eine Klasse und keine Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092370</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 13 Jul 2011 15:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 16:05:13 GMT]]></title><description><![CDATA[<p>Wir sollen ne Art protokollierung aller Überweisungen in einem Simulationsdurchgang machen und da dacht ich mir ich pack das inne extra Klasse und Speicher das innem <code>std::vector&lt;Transaction&gt;</code> in der Banksimulation später.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092383</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 13 Jul 2011 16:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 16:21:43 GMT]]></title><description><![CDATA[<p>Ah, okay. Ich dachte nur, dass wenn sowas</p>
<pre><code class="language-cpp">Account a(100,100); 
Account b(100,100); 

Transaction t(&amp;a,&amp;b,100);
</code></pre>
<p>der Haupteinsatzzweck ist, eine Funktion wahrscheinlich geeigneter wäre. Aber für Zwischenspeicherung ist eine Klasse okay.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092388</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 13 Jul 2011 16:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoreinsatz korrekt? on Wed, 13 Jul 2011 16:22:50 GMT]]></title><description><![CDATA[<p>Nee das wäre etwas eigenartig <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="😃"
    /> Da wäre ne Funktion wirklich besser <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2092390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092390</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 13 Jul 2011 16:22:50 GMT</pubDate></item></channel></rss>