<?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[operator= Überladung - ein Verständnisproblem]]></title><description><![CDATA[<p>Hallo liebe Community,<br />
Zuerst folgender Code:</p>
<pre><code class="language-cpp">void Ctest::test()
{
     Ctest *helpObj = new Ctest();
     // hilfskopie 
     helpObj = this;
}

// overloaded assignment 
Ctest&amp; Ctest::operator=(const Ctest&amp; rhs)
{
	if(this != &amp;rhs)
	{
		this-&gt;strName = rhs.strName; // Member vom Typ CString
	}

	return *this;
}
</code></pre>
<p>So, der oben gezeigte Code funktioniert soweit problemlos. Wenn ich nun jedoch in die Funktion test() die Zeile</p>
<pre><code class="language-cpp">// zurückkopieren
helpObj = this;
</code></pre>
<p>einfüge, bekomme ich einen error bezüglich einer ungültigen Zuweisung(l-value error). Nun verstehe ich leider überhaupt nicht warum das so ist ist. Liegt es am &quot;const&quot; im Kopf der Operatorüberladungsfunktion?!</p>
<p>Ich verstehe leider überhaupt nicht warum die Zuweisung nicht klappt. Ich habe doch sowohl links als auch rechts vom = einen pointer auf Ctest(), aber warum kommt dann der Fehler?</p>
<p>Über eine kurze &quot;Aufklärung&quot; wäre ich euch sehr dankbar!</p>
<p>Liebe Grüße,<br />
inva</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224166/operator-überladung-ein-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 18:25:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224166.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Oct 2008 14:43:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Mon, 06 Oct 2008 14:43:35 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,<br />
Zuerst folgender Code:</p>
<pre><code class="language-cpp">void Ctest::test()
{
     Ctest *helpObj = new Ctest();
     // hilfskopie 
     helpObj = this;
}

// overloaded assignment 
Ctest&amp; Ctest::operator=(const Ctest&amp; rhs)
{
	if(this != &amp;rhs)
	{
		this-&gt;strName = rhs.strName; // Member vom Typ CString
	}

	return *this;
}
</code></pre>
<p>So, der oben gezeigte Code funktioniert soweit problemlos. Wenn ich nun jedoch in die Funktion test() die Zeile</p>
<pre><code class="language-cpp">// zurückkopieren
helpObj = this;
</code></pre>
<p>einfüge, bekomme ich einen error bezüglich einer ungültigen Zuweisung(l-value error). Nun verstehe ich leider überhaupt nicht warum das so ist ist. Liegt es am &quot;const&quot; im Kopf der Operatorüberladungsfunktion?!</p>
<p>Ich verstehe leider überhaupt nicht warum die Zuweisung nicht klappt. Ich habe doch sowohl links als auch rechts vom = einen pointer auf Ctest(), aber warum kommt dann der Fehler?</p>
<p>Über eine kurze &quot;Aufklärung&quot; wäre ich euch sehr dankbar!</p>
<p>Liebe Grüße,<br />
inva</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594271</guid><dc:creator><![CDATA[inva]]></dc:creator><pubDate>Mon, 06 Oct 2008 14:43:35 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Mon, 06 Oct 2008 14:54:12 GMT]]></title><description><![CDATA[<p>Erstens mal die Frage, wozu Du überhaupt ein Hilfsobjekt auf dem Heap brauchst.<br />
Zweitens würde ich sowas mit einem Copy-Ctor machen:</p>
<pre><code class="language-cpp">Ctest helpObj(*this);
//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1594283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594283</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 06 Oct 2008 14:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Mon, 06 Oct 2008 15:14:59 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Erstens mal die Frage, wozu Du überhaupt ein Hilfsobjekt auf dem Heap brauchst.</p>
</blockquote>
<p>Ich brauche es, weil ich eine DB Abfrage mache indem ich die entsprechende Methode des Objekts aufrufe, diese Methode manipuliert/verändert mir jedoch die Member des Objekts, was in diesem einen speziellen Fall nicht zwingend erforderlich ist bzw. nicht erwünscht ist.</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Zweitens würde ich sowas mit einem Copy-Ctor machen:</p>
<pre><code class="language-cpp">Ctest helpObj(*this);
//...
</code></pre>
</blockquote>
<p>Das Problem was ich habe ist ja, dass ich die Daten auf dem Objekt &quot;helpObj&quot; nicht wieder zurück auf das objekt hinterm &quot;this&quot; zeiger bekomme.</p>
<p>Ich denk, dazu ist es sinnvoll etwas weiter auszuholen.<br />
Es gibt eine Funktion in einer Dialogklasse. In dieser erzeuge ich ein Objekt vom Typ Ctest() und setze nahezu alle Member. Nun rufe ich eine Methode des eben erzeugten Ctest() Objekts auf und lande im Code, den ich in meinem ersten Beitrag gepostet habe. Diese Funktion dient dazu, dass noch &quot;leere&quot; Member zu setzen (daher wird der this zeiger benötigt), hierzu sind Info's aus der DB erforderlich, anhand welcher eine Auswertung stattfindet und das letzte Member gesetzt wird.</p>
<p>Nun möchte ich mir gern eine Sicherheitskopie des Objekts machen, bevor mir meine DB Abfrage, welche ebenfalls als Membermethode aufgerufen wird (this-&gt;GetData(&quot;...&quot;)), alle vorher im Dialog gesetzten Inhalte überschreibt.</p>
<p>2 Lösungen die mir selber gerade dazu einfallen wären, entweder zuerst das entsprechende Member zu setzen, was wohl viel Aufwand sparen würde, oder einfach die Methode &quot;GetData()&quot; durch das Hilfsobjekt aufrufen zu lassen wodurch das Objekt hinter dem this Zeiger unangetastet bleibt.</p>
<p>Ich denk ich werde eine der beiden Lösungen nehmen, das ist sicher einfacher und spart mir Aufwand.</p>
<p>Wobei ich trotzdem neugierig bin, wie ichs lösen könnte wenn ich die Daten wieder aufs Objekt hinterm this Zeiger zurückschreiben wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594294</guid><dc:creator><![CDATA[inva]]></dc:creator><pubDate>Mon, 06 Oct 2008 15:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Mon, 06 Oct 2008 15:50:23 GMT]]></title><description><![CDATA[<p>Du verschaffst Dir einen Zeiger auf ein Objekt mit:</p>
<p>Ctest *helpObj = new Ctest();</p>
<p>Danach weist Du diesem Zeiger einen anderen Wert zu mit:</p>
<p>helpObj = this;</p>
<p>Damit hast Du schon mal ein Memory-Leak, denn Du hast keinen Zeiger mehr auf Dein mit new angelegtes Objekt.<br />
Danach willst Du vermutlich</p>
<p>this = helpObj;</p>
<p>machen?</p>
<p>Das geht natürlich nicht, denn this zeigt immer auf die aktuelle Objekt-Instanz.<br />
Ich denke, Du willst in Wirklichkeit</p>
<p>*helpObj = *this;</p>
<p>und</p>
<p>*this = *helpObj;</p>
<p>machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594322</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 06 Oct 2008 15:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Tue, 07 Oct 2008 07:08:23 GMT]]></title><description><![CDATA[<p>Hallo Belli, danke für deinen Tipp!</p>
<p>Belli schrieb:</p>
<blockquote>
<p>Du verschaffst Dir einen Zeiger auf ein Objekt mit:</p>
<p>Ctest *helpObj = new Ctest();</p>
<p>Danach weist Du diesem Zeiger einen anderen Wert zu mit:</p>
<p>helpObj = this;</p>
<p>Damit hast Du schon mal ein Memory-Leak, denn Du hast keinen Zeiger mehr auf Dein mit new angelegtes Objekt.</p>
<p>Danach willst Du vermutlich</p>
<p>this = helpObj;</p>
<p>machen?</p>
<p>Das geht natürlich nicht, denn this zeigt immer auf die aktuelle Objekt-Instanz.<br />
Ich denke, Du willst in Wirklichkeit</p>
<p>*helpObj = *this;</p>
<p>und</p>
<p>*this = *helpObj;</p>
<p>machen?</p>
</blockquote>
<p>Ja, stimmt ... ich war erst im Zweifel aber nachdem ich kurz drüber nachgedacht habe, hab ich festgestellt, dass du recht hast. Ich habe wohl einfach den * vor den Zeigern vergessen wodurch ich mir ja die Daten, auf die der Zeiger zeigt, hole.</p>
<p>Danke Belli, das wars!</p>
<p>Liebe Grüße,<br />
inva</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594602</guid><dc:creator><![CDATA[inva]]></dc:creator><pubDate>Tue, 07 Oct 2008 07:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Tue, 07 Oct 2008 07:18:13 GMT]]></title><description><![CDATA[<p>Wie wäre es, wenn du deiner Ctest Klasse einen Kopierkonstruktor gibst und dann eine Stackkopie machst?</p>
<pre><code class="language-cpp">void Ctest::test()
{
  Ctest helpObj(*this);

  // helpObj ist jetzt eine Kopie auf dem Stack.
  // Ist schneller und hat keine Memory Leak Gefahr.
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594606</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 07 Oct 2008 07:18:13 GMT</pubDate></item><item><title><![CDATA[Reply to operator= Überladung - ein Verständnisproblem on Tue, 07 Oct 2008 09:17:53 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Wie wäre es, wenn du deiner Ctest Klasse einen Kopierkonstruktor gibst und dann eine Stackkopie machst?</p>
<pre><code class="language-cpp">void Ctest::test()
{
  Ctest helpObj(*this);

  // helpObj ist jetzt eine Kopie auf dem Stack.
  // Ist schneller und hat keine Memory Leak Gefahr.
}
</code></pre>
<p>Grüssli</p>
</blockquote>
<p>Danke für den Tipp, habs gleich umgesetzt <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="🙂"
    /><br />
Da hab ich nun wieder was, zwar nicht neues, gelernt.</p>
<p>Vielen Dank für die hilfreichen Ratschläge!</p>
<p>Grüße,<br />
inva</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1594662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1594662</guid><dc:creator><![CDATA[inva]]></dc:creator><pubDate>Tue, 07 Oct 2008 09:17:53 GMT</pubDate></item></channel></rss>