<?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[Verständnisfrage]]></title><description><![CDATA[<p>So also ums schnell auf den Punkt zu bringen.<br />
Ich habe ein array mit Werten egal welchen Datentyps darin die gleich folgende BeispielCode Klasse ist nur ein Beispiel um das zu verdeutlichen.<br />
Wenn ich nun den operater+ überlade habe ich ein problem das ich gerne vermeiden würde.</p>
<pre><code class="language-cpp">class Werte{
public:
	Werte(int,int*);
	virtual ~Werte();
	Werte operator+(Werte&amp;);
	Werte&amp; operator=(Werte&amp;);
	int operator[](int);

private:
	int size;
	int *feld;
};
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<pre><code class="language-cpp">Werte::Werte(int sz, int *values)
{
	size = sz;
	feld = new int[sz];
	for(int i=0;i&lt;sz;i++)
		feld[i] = values[i];
}

Werte::~Werte()
{
	delete[] feld;
}

Werte Werte::operator +(Werte&amp; w)
{
	int tempsize;

	if(size &lt; w.size)
		tempsize = size;
	else
		tempsize = w.size;

	int *temparray = new int[tempsize];
	for(int i =0;i&lt;tempsize;i++)
		temparray[i] = feld[i]+w.feld[i];

	Werte tmp(tempsize, temparray);

	return tmp;
}

Werte&amp; Werte::operator=(Werte&amp; w)
{
	w.size = size;
	for(int i=0;i&lt;size;i++)
		w.feld[i] = feld[i];
	return w;
}

int Werte::operator [](int i)
{
	return feld[i];
}
</code></pre>
<p>Bitte unterlasst Kommentare zum code da ich ihn nur eben schnell hingeklatscht habe damit ich mein Verstädnisproblem besser erläutern kann.<br />
Wie ihr seht erzeuge ich in der Funktion des überladenen Plus Operators ein temporäres Objekt welches ich anschliessend zurückgeben möchte.<br />
Das Problem ist aber das ja temporäre Objekte nach verlassen der Methode zerstört werden, d.h. der Destruktor &quot;löscht&quot; mein Wertearry.<br />
Was ist zu tun, dass dies nicht passiert ich steh grad extrem auf dem Schlauch und zerbrech mir schon den ganzen morgen den Kopf darüber, wie sich das vermeiden lässt ohne Speichermüll zurückzulassen indem ich die delete[] Zeile im Destruktor entferne. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181010/verständnisfrage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 03:14:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181010.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 May 2007 07:54:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage on Wed, 09 May 2007 07:54:23 GMT]]></title><description><![CDATA[<p>So also ums schnell auf den Punkt zu bringen.<br />
Ich habe ein array mit Werten egal welchen Datentyps darin die gleich folgende BeispielCode Klasse ist nur ein Beispiel um das zu verdeutlichen.<br />
Wenn ich nun den operater+ überlade habe ich ein problem das ich gerne vermeiden würde.</p>
<pre><code class="language-cpp">class Werte{
public:
	Werte(int,int*);
	virtual ~Werte();
	Werte operator+(Werte&amp;);
	Werte&amp; operator=(Werte&amp;);
	int operator[](int);

private:
	int size;
	int *feld;
};
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<pre><code class="language-cpp">Werte::Werte(int sz, int *values)
{
	size = sz;
	feld = new int[sz];
	for(int i=0;i&lt;sz;i++)
		feld[i] = values[i];
}

Werte::~Werte()
{
	delete[] feld;
}

Werte Werte::operator +(Werte&amp; w)
{
	int tempsize;

	if(size &lt; w.size)
		tempsize = size;
	else
		tempsize = w.size;

	int *temparray = new int[tempsize];
	for(int i =0;i&lt;tempsize;i++)
		temparray[i] = feld[i]+w.feld[i];

	Werte tmp(tempsize, temparray);

	return tmp;
}

Werte&amp; Werte::operator=(Werte&amp; w)
{
	w.size = size;
	for(int i=0;i&lt;size;i++)
		w.feld[i] = feld[i];
	return w;
}

int Werte::operator [](int i)
{
	return feld[i];
}
</code></pre>
<p>Bitte unterlasst Kommentare zum code da ich ihn nur eben schnell hingeklatscht habe damit ich mein Verstädnisproblem besser erläutern kann.<br />
Wie ihr seht erzeuge ich in der Funktion des überladenen Plus Operators ein temporäres Objekt welches ich anschliessend zurückgeben möchte.<br />
Das Problem ist aber das ja temporäre Objekte nach verlassen der Methode zerstört werden, d.h. der Destruktor &quot;löscht&quot; mein Wertearry.<br />
Was ist zu tun, dass dies nicht passiert ich steh grad extrem auf dem Schlauch und zerbrech mir schon den ganzen morgen den Kopf darüber, wie sich das vermeiden lässt ohne Speichermüll zurückzulassen indem ich die delete[] Zeile im Destruktor entferne. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281353</guid><dc:creator><![CDATA[Brok3r]]></dc:creator><pubDate>Wed, 09 May 2007 07:54:23 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Wed, 09 May 2007 08:01:54 GMT]]></title><description><![CDATA[<p>Soweit ist dein Problem schon klar (und hat nichts mit dem operator+ an sich zu tun). Die return-Anweisung erzeugt <em>mittels Copy-Ctor</em> eine temporäre Variable, die an die aufrufende Funktion übergeben wird, bevor die Funktion ihre Daten aufräumt (und den Dtor von 'tmp' aufruft). Dieses Objekt wird später von der Funktion freigegeben, die den op+ aufgerufen hat.</p>
<p>Und genau in dem kursiven Teil da oben steckt dein Problem: Du hast keinen Copy-Ctor definiert, also legt der Compiler einen eigenen an. Und der default-angelegte Copy-Ctor führt eine flache Kopie durch (sprich: er kopiert lediglich die Member 'size' und 'feld' - aber letzteres zeigt weiterhin auf das Feld, das tmp's Dtor freigegeben hat =&gt; BUMM).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281360</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 09 May 2007 08:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage on Wed, 09 May 2007 08:06:14 GMT]]></title><description><![CDATA[<p>Ja nu is klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Vielen Dank für die rasche Beantwortung meiner Frage.<br />
War mir schon klar das dies nicht direkt mit dem operator+ zu tun hat nur eben wußte ich nicht wie ich dieses &quot;komische&quot; verhalten abschalten kann :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281363</guid><dc:creator><![CDATA[Brok3r]]></dc:creator><pubDate>Wed, 09 May 2007 08:06:14 GMT</pubDate></item></channel></rss>