<?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[Grundlegende Frage zur Übergabe bei Objekten]]></title><description><![CDATA[<p>So, ich bin es mal wieder um habe nun eine größere Frage.<br />
In den Büchern die ich habe konnte mir diesbezüglich nicht weitergeholfen werden, da die Beispiele einfach zu &quot;einfach&quot; sind.</p>
<p>Also erst einmal folgende Situation (einige kennen meine Probleme bereits).<br />
Ich implementiere einen Algorithmus bestehend aus mehreren Klassen.<br />
Während der Algorithmus abläuft können Objekte namens Node erzeugt und gelöscht werden.</p>
<p>1. Wenn ich Objekte von Node während der Laufzeit anlege, muss ich diese dann mit</p>
<pre><code class="language-cpp">Node actualNode = new Node();
</code></pre>
<p>erzeugen?<br />
oder kann ich einfach</p>
<pre><code class="language-cpp">Node actualNode;
</code></pre>
<p>schreiben?</p>
<p>Also mein Problem ist, ich verstehe nicht ganz, wann ich auf Objekte noch zuggreifen kann bzw. wann die &quot;verschwinden&quot;!?</p>
<p>2. Wenn ich ein solches Objekt besitze, welches mehrere Typen von int, double oder vector enthält.<br />
Wie gebe ich diese zurück. Also kann ich einfach Referenzen darauf zurückgeben?<br />
Müssen diese Typen innerhalb des Objekts besonders angelegt werden? Oder muss ich Pointer darauf zurückgeben? Wieso bräuchte ich dann Pointer darauf, warum geht nicht alleine eine Referenz?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225179/grundlegende-frage-zur-übergabe-bei-objekten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 19:39:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225179.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Oct 2008 15:05:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundlegende Frage zur Übergabe bei Objekten on Mon, 20 Oct 2008 15:05:43 GMT]]></title><description><![CDATA[<p>So, ich bin es mal wieder um habe nun eine größere Frage.<br />
In den Büchern die ich habe konnte mir diesbezüglich nicht weitergeholfen werden, da die Beispiele einfach zu &quot;einfach&quot; sind.</p>
<p>Also erst einmal folgende Situation (einige kennen meine Probleme bereits).<br />
Ich implementiere einen Algorithmus bestehend aus mehreren Klassen.<br />
Während der Algorithmus abläuft können Objekte namens Node erzeugt und gelöscht werden.</p>
<p>1. Wenn ich Objekte von Node während der Laufzeit anlege, muss ich diese dann mit</p>
<pre><code class="language-cpp">Node actualNode = new Node();
</code></pre>
<p>erzeugen?<br />
oder kann ich einfach</p>
<pre><code class="language-cpp">Node actualNode;
</code></pre>
<p>schreiben?</p>
<p>Also mein Problem ist, ich verstehe nicht ganz, wann ich auf Objekte noch zuggreifen kann bzw. wann die &quot;verschwinden&quot;!?</p>
<p>2. Wenn ich ein solches Objekt besitze, welches mehrere Typen von int, double oder vector enthält.<br />
Wie gebe ich diese zurück. Also kann ich einfach Referenzen darauf zurückgeben?<br />
Müssen diese Typen innerhalb des Objekts besonders angelegt werden? Oder muss ich Pointer darauf zurückgeben? Wieso bräuchte ich dann Pointer darauf, warum geht nicht alleine eine Referenz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1601766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1601766</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Mon, 20 Oct 2008 15:05:43 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlegende Frage zur Übergabe bei Objekten on Mon, 20 Oct 2008 15:35:04 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>1. Wenn ich Objekte von Node während der Laufzeit anlege, muss ich diese dann mit</p>
<pre><code class="language-cpp">Node actualNode = new Node();
</code></pre>
<p>erzeugen?<br />
oder kann ich einfach</p>
<pre><code class="language-cpp">Node actualNode;
</code></pre>
<p>schreiben?</p>
</blockquote>
<p>Das erstere geht nicht, es muss heißen:</p>
<pre><code class="language-cpp">// Heap
Node * pointee = new Node(); // Allokieren von Speicher auf dem Heap,
                             // zugriff über die Speicheradresse
// ...
delete pointee;              // Später wieder freigeben!

// Stack
Node actualNode;             // Anlegen auf den Stack, Zugriff über Objekt
</code></pre>
<p>redbomber schrieb:</p>
<blockquote>
<p>Also mein Problem ist, ich verstehe nicht ganz, wann ich auf Objekte noch zuggreifen kann bzw. wann die &quot;verschwinden&quot;!?</p>
</blockquote>
<p>Ein Objekt lebt solange, wie es im &quot;Scope&quot; bleibt:</p>
<pre><code class="language-cpp">// 1. Objekte auf dem Heap
int main()
{
    int a;
    {
        int b;
        // hier ist a und b gültig
    }   // &lt;-- b wird ungültig
}   // &lt;-- a wird ungültig
</code></pre>
<p>Bei Objekten auf dem Stack sieht es ein wenig anders aus. Solche Objekte verwaltet man über den Zeiger. Dieser verliert auch seine Gültigkeit wie oben, es erfolgt aber keine automatische Freigabe des Objektes auf den er verweist. Dies muss man selbst mit delete durchführen.</p>
<p>Hierzu und zu allen anderen solltest du aber in ein C++ Buch deines Vertrauens schauen.</p>
<p>redbomber schrieb:</p>
<blockquote>
<p>2. Wenn ich ein solches Objekt besitze, welches mehrere Typen von int, double oder vector enthält.<br />
Wie gebe ich diese zurück. Also kann ich einfach Referenzen darauf zurückgeben?</p>
</blockquote>
<p>Grundsätzlich: Lokale Variablen kannst du nicht als Referenz zurückliefern, sondern nur als Kopie:</p>
<pre><code class="language-cpp">int&amp; foo_falsch()
{
    int i;
    return i;
}  // i geht aus dem Scope, ist daher ungültig, und es ist undefiniert was
   // ankommt.

int foo_richtig()
{
    int i;
    return i;
}  // i geht aus dem Scope, aber der Rückgabewert ist eine Kopie von i
</code></pre>
<p>Referenzen kannst du nur zurückgeben, wenn die Variable die Rückgabe überlebt:</p>
<pre><code class="language-cpp">class A
{
  private:
    int i;
  public:
    int&amp; foo()
    {
      return i; // &lt;-- Dies ist wiederum möglich, da der Member solange lebt,
                //     wie die Instanz. Normalerweise gibt man aber keine
                //     nicht-konstanten Referenzen auf Member zurück
    }
};
</code></pre>
<p>redbomber schrieb:</p>
<blockquote>
<p>Müssen diese Typen innerhalb des Objekts besonders angelegt werden? Oder muss ich Pointer darauf zurückgeben? Wieso bräuchte ich dann Pointer darauf, warum geht nicht alleine eine Referenz?</p>
</blockquote>
<p>Innerhalb eines Objektes müssen Elemente (Membervariablen) nicht speziell angelegt werden, initialisieren sollte man diese aber in der Initialisierungsliste des Konstruktors:</p>
<pre><code class="language-cpp">class A
{
  private:
    int i;
    int j;
  public:
    A()
    : i(4), // \ Initialisieren der Membervariablen
      j(5)  // /
    {
      i = 6; // Dies ist eine Zuweisung, keine Initialisierung!
    }
};
</code></pre>
<p>Konstanten und Referenzen als Member kann man nur in der Initialisierungsliste setzen, niemals nachträglich.</p>
<p>cu André<br />
P.S: Was du auch noch lernen solltest wäre vermutlich &quot;Call-By-Value&quot;, &quot;Call-By-Reference&quot;... aber dazu lasse ich dich erstmal die Forensuche bemühen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1601784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1601784</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 20 Oct 2008 15:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlegende Frage zur Übergabe bei Objekten on Mon, 20 Oct 2008 16:05:50 GMT]]></title><description><![CDATA[<p>Zu Zeigern und dynamischem Speicher sollte man noch sagen, dass der allokierte dynamische Speicher immer so lange allokiert bleibt, wie Du es möchtest. Soll heissen, wenn Du ein Objekt, welches Du mit <code>new</code> allokierst nicht explizit mit <code>delete</code> wieder freigibst, bleibt es bestehen, bis das Betriebsystem den Speicher wieder freigibt, so es das denn kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1601800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1601800</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 20 Oct 2008 16:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlegende Frage zur Übergabe bei Objekten on Mon, 20 Oct 2008 16:15:45 GMT]]></title><description><![CDATA[<p>deshalb sollte mann auch auf smartpointer zurück greifen vorallem die aus boost bieten sich dafür sehrgut an<br />
zu diesem thema gibt es hier im forum mehere beiträge</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1601805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1601805</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Mon, 20 Oct 2008 16:15:45 GMT</pubDate></item></channel></rss>