<?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[rückgabe von Objekten]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Ich habe eine Klasse Parent, welches zwei Methoden besitzt.<br />
Die erste Methode liefert ein Object zurück, welche vom Parent freigegeben wird.</p>
<pre><code>Child *getChild()
{
	return child;
}
</code></pre>
<p>Die zweite Methode liefert ein Object zurück, welche vom aufrufer freigegeben werden muss.</p>
<pre><code>Child *getNewChild()
{
	return new Child();
}
</code></pre>
<p>Wie muss ich die Methoden deklarieren, das man es sofort erkennt.</p>
<p>mfg<br />
funcky</p>
<pre><code>class Child
{
public:
	Child()
	{
		value = 1;
	}

	~Child();

	int getValue()
	{
		return value;
	}

private:
	int value;

};

class Parent
{
public:
	Parent()
	{
		child = new Child();
	}

	~Parent();

	Child *getChild()
	{
		return child;
	}

	Child *getNewChild()
	{
		return new Child();
	}

private:
	Child *child;

};

int main(int argc, char* argv[])
{
	Parent p;

	Child *c1 = p.getChild();
	Child *c2 = p.getNewChild();

	printf(&quot;Hallo Welt!\n&quot;);

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/152291/rückgabe-von-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 21:48:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152291.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Jul 2006 07:21:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 07:21:39 GMT]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Ich habe eine Klasse Parent, welches zwei Methoden besitzt.<br />
Die erste Methode liefert ein Object zurück, welche vom Parent freigegeben wird.</p>
<pre><code>Child *getChild()
{
	return child;
}
</code></pre>
<p>Die zweite Methode liefert ein Object zurück, welche vom aufrufer freigegeben werden muss.</p>
<pre><code>Child *getNewChild()
{
	return new Child();
}
</code></pre>
<p>Wie muss ich die Methoden deklarieren, das man es sofort erkennt.</p>
<p>mfg<br />
funcky</p>
<pre><code>class Child
{
public:
	Child()
	{
		value = 1;
	}

	~Child();

	int getValue()
	{
		return value;
	}

private:
	int value;

};

class Parent
{
public:
	Parent()
	{
		child = new Child();
	}

	~Parent();

	Child *getChild()
	{
		return child;
	}

	Child *getNewChild()
	{
		return new Child();
	}

private:
	Child *child;

};

int main(int argc, char* argv[])
{
	Parent p;

	Child *c1 = p.getChild();
	Child *c2 = p.getNewChild();

	printf(&quot;Hallo Welt!\n&quot;);

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1091544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091544</guid><dc:creator><![CDATA[funcky]]></dc:creator><pubDate>Wed, 05 Jul 2006 07:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 07:32:03 GMT]]></title><description><![CDATA[<p>Was genau hast du denn vor?</p>
<p>Bau doch einfach eine Klasse um deine Konstruktion herum, die sich um den ganzen Kram kümmert. Falls es ein Baum werden soll, versteh ich den Sinn nicht, warum ein neues &quot;Kind&quot; erzeugt wird, aber nicht gespeichert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091547</guid><dc:creator><![CDATA[cin]]></dc:creator><pubDate>Wed, 05 Jul 2006 07:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 07:54:22 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>es geht mir nicht darum einen Baum zu erzeugen.<br />
Ich möchte in Parent ein Object erzeugen und diese dem Aufrufer zurück geben.<br />
In der Methode &quot;getChild()&quot; soll ein Object zurück gegeben werden, welche für<br />
die Speicherverwaltung Parent zuständig ist.<br />
In der Methode &quot;getNewChild()&quot; soll ein Object zurück gegeben werden, welche für die Speicherverwaltung der Aufrufer zuständig ist.<br />
Und dies soll der Aufrufer anhang der Deklarion von der Methode erkennen können.<br />
Wenn ich die Methode &quot;getChild()&quot; so deklariere:</p>
<pre><code>const Child *getChild();
</code></pre>
<p>kann ich die Methoden von Child nicht mehr aufrufen.</p>
<p>Wie muss ich vor gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091565</guid><dc:creator><![CDATA[funcky]]></dc:creator><pubDate>Wed, 05 Jul 2006 07:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 09:14:47 GMT]]></title><description><![CDATA[<p>Benutze std::auto_ptr. <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="😉"
    /> Es ist überhaupt keine gute Idee allozierten Speicher zurückzugeben und den Aufruf der Funktion zu überlassen, den Speicher wieder frei zu geben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091627</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Jul 2006 09:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 09:33:06 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Was macht man den mit Mthoden, die ein Objekt erzeugt und zurück geben sollen ?</p>
<p>mfg<br />
funcky</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091638</guid><dc:creator><![CDATA[funcky]]></dc:creator><pubDate>Wed, 05 Jul 2006 09:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 09:48:39 GMT]]></title><description><![CDATA[<p>DU bist bei C++ und nicht bei C ...</p>
<p>Also solltest du:<br />
- versuchen deine Objecte nicht als zeiger, sondern alls referenzen zu uebergeben. Deine Objecte sollten sich am besten weitgehend aehnlich wie POD's verhalten. Also CCTOR zuweisungsop usw implementieren.</p>
<p>Das geht in vielen faellen natuerlich nicht. Dynamischen Speicher speicher hat man ja nich umsonst eingefuehrt.<br />
rohe zeiger sind in c++ die schlechteste veriante. sollt man nur intern verwenden, also als autor von biblotheken sollte der user (benutzende programmierer) davonb nix zu sehen bekommen. Da sind dan, je nach anwendungsfall, entweder generische wrapper fuer zeiger eine möglichkeit (smartpointer - auto_ptr usw ...) oder spezialisierte wrapper fuer dein ganz bestimmtes object.</p>
<p>Das ist natuerlich auch ne frage des aufwands ... aber grad fuer schnittstellen wo mehr als 1 programmierer beteiligt ist, lohnt sich so nen sauberes design fast immer .</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091649</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Wed, 05 Jul 2006 09:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 10:54:10 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>DU bist bei C++ und nicht bei C ...</p>
<p>Also solltest du:<br />
- versuchen deine Objecte nicht als zeiger, sondern alls referenzen zu uebergeben.</p>
</blockquote>
<p>In dem Fall noch schlimmer als rohe Zeiger.</p>
<p>Wenn man nicht will, das der User sich selbst drum kümmern muß die Objekte zu löschen, sollte man Smartpointer benutzen. auto_ptr ist ein Möglichkeit, wobei dieser auch ein sehr spezielles Verhalten hat. Den benutze ich zwar auch gerne, aber er ist nicht immer für den User sinnvoll. Dann doch eher z.B. shared_ptr benutzen (ist im TR1 drin oder halt aus boost, wenn TR1 nicht verfügbar).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091683</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 05 Jul 2006 10:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 10:55:46 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>&quot;versuchen deine Objecte nicht als zeiger, sondern alls referenzen zu uebergeben.&quot;<br />
Bei meinem Fall werden Objecte nicht übergeben, sondern zurück gegeben.</p>
<p>&quot;Deine Objecte sollten sich am besten weitgehend aehnlich wie POD's verhalten. Also CCTOR zuweisungsop usw implementieren.&quot;<br />
Was sind POD's und CCTOR ?</p>
<p>Ich werde in Zukunft auto_ptr benutzen oder für meine Klassen ein MemoryManager schreiben, welches sich die dynamisch erzeugten Objecte merkt und am Ende löscht.</p>
<p>mfg<br />
funcky</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091684</guid><dc:creator><![CDATA[funcky]]></dc:creator><pubDate>Wed, 05 Jul 2006 10:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 11:49:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Bei meinem Fall werden Objecte nicht übergeben, sondern zurück gegeben.</p>
</blockquote>
<p>nen rueckgabeparameter iss nix anderes wie nen paramater nur in die andere Richtung ... insofern ist es eine uebergabe der funktion an die ausfuehrende instanz. Und da ist in c++ technisch kein unterschied, es sind die selben regeln.</p>
<p>POD = plain old data : also einfache datentypen + simple strukturen int als typ ist z.b. nen pod<br />
CCTOR = copy constructor</p>
<p>ob Smartpointer sinvoll sind, entscheidet eigentlich der anwendungsfall ...</p>
<p>Die gradwanderung beim c++ programmieren ist halt, mögliche fehlerquellen fruehzeitig zu erkennen und drauf mit geeignetem design zu reagieren, die performance nich ausm auge zu verlieren und dabei noch den aufwand in grenzen halten. Grad als Bibliothekentwickler kommst da nie auf ne 100% loesung, sondern immer nur auf die am meisten tragbarsten Kompromisse.</p>
<p>bei deinem rueckgabedingens problem die optimale loesung zu finden, da fehlen uns noch informationen. z.b:<br />
dein rueckgabeobjekt, wie gross is dass, was macht performancetechnisch ne kopie auf podebene aus. Wenn das rausfaellt, kommt als naechstes die frgae nach threadsicherheit (bei smartpointer meist nen echtes, aber loesbares problem).<br />
Ne andere designfrage waer zb. die erzeugung und zerstoerung die entsprechende klasse verlegen (static memberfunktionen) die erzeugerfunktion schuetzen (private) und nur ausgewaehlten objecten (parent, per friend deklaration) zugaenglich zu machen. die zerstoerung ueber eine allgemein zugaengliche destroy funktion abhandeln ....</p>
<p>Falls alles nicht in frage kommt, oder zusaetzlich, kann man immer noch wrappen (ne art spzialisierter smartpointer, aber mit definierten verhalten und komfortfunktionen)das der user ja nix mit zeiger zu tun hat .... smartpointer sind meist zu allegemein und auch fehlertraechtig.</p>
<p>Das alles must du entscheiden, was dir die sicherheit und der komfort deiner lib wert ist ....</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091720</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Wed, 05 Jul 2006 11:49:48 GMT</pubDate></item><item><title><![CDATA[Reply to rückgabe von Objekten on Wed, 05 Jul 2006 13:05:40 GMT]]></title><description><![CDATA[<p>funcky schrieb:</p>
<blockquote>
<p>oder für meine Klassen ein MemoryManager schreiben, welches sich die dynamisch erzeugten Objecte merkt und am Ende löscht.</p>
</blockquote>
<p>Äh, warum selber schreiben, wenn das schon shared_ptr macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091786</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 05 Jul 2006 13:05:40 GMT</pubDate></item></channel></rss>