<?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[C++: Objekte übergeben]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde mich über etwas Hilfe bei folgendem Problem freuen:<br />
Ich möchte gerne, dass eine Klasse A mehrere Objekte einer Klasse B kennt (Aggregation) und A dieses Array an C weitergibt. Leider habe ich mich soweit verwirrt, dass ich mit den Pointern nur noch blind im Wald rumschieße <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /> :</p>
<pre><code>// A soll B kennen und an C übergeben
class A
{
    B* array_mit_Obj[5];
public:
   B* ÜbergabeFunction()
    {   //...
        array_mit_Obj[i] = new B(...);
        //...
        return *array_mit_Obj;
    }
};

class B
{};
</code></pre>
<pre><code>// Objekte von C sollen die Infos von A bekommen und am besten in einem eigenen // Array speichern
class C
{
   B* neuesArray[5];
public:
    C(B*);
};

C::C(B* fromA)
{
    memcpy(&amp;neuesArray, &amp;fromA,sizeof(fromA));
}
</code></pre>
<pre><code>int main()
{
A Obj_a();
C Obj_c(Obj_a.ÜbergabeFunction());
}
</code></pre>
<p>Ich hoffe ich hab nicht nur Käse zusammengeschrieben... Danke schonmal für Eure Antworten.<br />
Lg<br />
moon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310528/c-objekte-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 13:18:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310528.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Nov 2012 05:25:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 05:25:53 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde mich über etwas Hilfe bei folgendem Problem freuen:<br />
Ich möchte gerne, dass eine Klasse A mehrere Objekte einer Klasse B kennt (Aggregation) und A dieses Array an C weitergibt. Leider habe ich mich soweit verwirrt, dass ich mit den Pointern nur noch blind im Wald rumschieße <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /> :</p>
<pre><code>// A soll B kennen und an C übergeben
class A
{
    B* array_mit_Obj[5];
public:
   B* ÜbergabeFunction()
    {   //...
        array_mit_Obj[i] = new B(...);
        //...
        return *array_mit_Obj;
    }
};

class B
{};
</code></pre>
<pre><code>// Objekte von C sollen die Infos von A bekommen und am besten in einem eigenen // Array speichern
class C
{
   B* neuesArray[5];
public:
    C(B*);
};

C::C(B* fromA)
{
    memcpy(&amp;neuesArray, &amp;fromA,sizeof(fromA));
}
</code></pre>
<pre><code>int main()
{
A Obj_a();
C Obj_c(Obj_a.ÜbergabeFunction());
}
</code></pre>
<p>Ich hoffe ich hab nicht nur Käse zusammengeschrieben... Danke schonmal für Eure Antworten.<br />
Lg<br />
moon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270621</guid><dc:creator><![CDATA[moon12]]></dc:creator><pubDate>Wed, 14 Nov 2012 05:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 06:14:27 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du einen <strong>STL-Container</strong> verwenden. Denn selber Speicher verwalten sollte gänzlich vermieden werden!</p>
<p>P.S.:<br />
Das:</p>
<blockquote>
<pre><code>A Obj_a();
</code></pre>
</blockquote>
<p>definiert keine Variable sondern deklariert eine Funktion <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="😉"
    /><br />
Mach die Klammern weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270625</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 06:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 07:47:36 GMT]]></title><description><![CDATA[<p>moon12 schrieb:</p>
<blockquote>
<p>Ich hoffe ich hab nicht nur Käse zusammengeschrieben...</p>
</blockquote>
<p>Leider doch.</p>
<p>Wenn Du willst, kannst Du noch darüber nachdenken, warum <code>B* array_mit_Obj[5];</code> ein Array mit fünf zeigern auf B ist. Was dann <code>return *array_mit_Obj;</code> zurückgibt, oder welches Ergebnis sizeof hier wohl liefert: <code>B* fromA; sizeof(fromA);</code> .</p>
<p>Wenn Du allerdings vorankommen willst, beherzige Sones Vorschlag, bau einen <code>std::vector</code> ein und schau wie weit Du damit kommst.<br />
Über Dein Pointer-Wirrwarr kannst Du ja mal an einem regnerischen Herbsttag nachdenken... <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/2270636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270636</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 14 Nov 2012 07:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:00:35 GMT]]></title><description><![CDATA[<p>Hi und danke für die Antworten!<br />
Den Hinweis mit Vector werde ich ausprobieren.</p>
<p>Trotzdem wüsste ich gerne warum bei mir der gepostete Code nicht klappt.<br />
Das ich ein Array mit Pointern habe ist mir klar.</p>
<pre><code>return *array_mit_Obj;
</code></pre>
<p>sollte einen Pointer auf das 1. Array element zurückgeben und <code>sizeof()</code> sollte dann die Größe des ganzen Arrays zurückgeben...richtig?</p>
<p>Es sollte doch möglich sein, den Inhalt dieses Arrays in ein Memberarray einer anderen Klasse zu kopieren?<br />
So wie es jetzt da steht, kann ich immerhin in der Klasse C auf das 1. Objekt im Array zugreifen, der Rest wird aber anscheinend nicht übergeben. Möglicherweise fehlt da irgendwo ein &quot;[]&quot;, ich hab aber schon etliche Kombinationen ausprobiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /><br />
Ein kleiner Hinweis, wie ich den Code zum Laufen bringen kann wäre zum Verständnis toll.</p>
<p>(mit</p>
<pre><code>A Obj_a();
</code></pre>
<p>soll der Konstruktor aufgerufen werden, im echten Programm mit Parametern)<br />
)<br />
lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270777</guid><dc:creator><![CDATA[moon12]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:00:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:08:20 GMT]]></title><description><![CDATA[<p>moon12 schrieb:</p>
<blockquote>
<p>Das ich ein Array mit Pointern habe ist mir klar.</p>
<pre><code>return *array_mit_Obj;
</code></pre>
<p>sollte einen Pointer auf das 1. Array element zurückgeben</p>
</blockquote>
<p>Was passiert, wenn du ein Array dereferenzierst, also was gibt folgendes zurück</p>
<pre><code class="language-cpp">int a[5] = {1,2,3,4,5};
auto x = *a; //welchen Typ und Wert hat x?

SomeType b[5] /* = ...*/;
auto y = *b; //welche Typ und Wert hat y?

Something* c[5] /* = ...*/;
auto z = *c; //welche Typ und Wert hat z?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2270780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270780</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:17:27 GMT]]></title><description><![CDATA[<p>moon12 schrieb:</p>
<blockquote>
<p>Das ich ein Array mit Pointern habe ist mir klar.</p>
<pre><code>return *array_mit_Obj;
</code></pre>
<p>sollte einen Pointer auf das 1. Array element zurückgeben und <code>sizeof()</code> sollte dann die Größe des ganzen Arrays zurückgeben...richtig?</p>
</blockquote>
<p>Weder noch. Arrays haben Sonderregeln und verhalten sich anders als alle anderen Objekte. Wenn du unbedingt Arrays benutzen willst, dann guck dir ein Lehrbuch dazu an. Das ist dann aber eher C-Stil, in C++ würdest du wie gesagt einen STL-Container benutzen, z.B. std::array (Feste Größe) oder std::vector (variable Größe) oder ganz einen anderen (wenn du andere Anforderungen hast). Die verhalten sich dann auch so, wie du intuitiv erwarten würdest.</p>
<blockquote>
<p>Es sollte doch möglich sein, den Inhalt dieses Arrays in ein Memberarray einer anderen Klasse zu kopieren?</p>
</blockquote>
<p>Jain. Aber nicht so einfach. Arrays kopieren ist in C (und damit auch C++) keine Zuweisung. Im Prinzip muss man jedes Element einzeln kopieren. Oder den Containertipp befolgen.</p>
<blockquote>
<p>So wie es jetzt da steht, kann ich immerhin in der Klasse C auf das 1. Objekt im Array zugreifen, der Rest wird aber anscheinend nicht übergeben. Möglicherweise fehlt da irgendwo ein &quot;[]&quot;, ich hab aber schon etliche Kombinationen ausprobiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /></p>
</blockquote>
<p>In der Programmierung ist Ausprobieren oft eine schlechte Technik. Du musst genau wissen, was jedes einzelne Zeichen in deinem Programm tut und warum du es gesetzt hast. Wie gesagt, wenn du unbedingt Arrays möchtest (dafür gibt es hier jedoch keinen ersichtlichen Grund), dann guck dir zuerst die Sonderregeln dafür an.</p>
<blockquote>
<p>Ein kleiner Hinweis, wie ich den Code zum Laufen bringen kann wäre zum Verständnis toll.</p>
</blockquote>
<p>Ich weiß nicht. Dann übernimmst du diesen Code, redest dir selber ein, dass du es verstanden hast und guckst dir dann die Standardcontainer (die die eigentlich richtige Lösung wären) gar nicht an. Nicht gegen dich, aber das ist einfach Erfahrung, dass das so läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270783</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:26:05 GMT]]></title><description><![CDATA[<blockquote>
<pre><code>int a[5] = {1,2,3,4,5}; 
auto x = *a; //welchen Typ und Wert hat x?

SomeType b[5] /* = ...*/;
auto y = *b; //welche Typ und Wert hat y?
</code></pre>
</blockquote>
<p>Der Typ ist der Elementtyp des Arrays, der Wert ist der des ersten Elements.</p>
<p>Wieso? Dank dem array-to-pointer decay. <code>a</code> zerfällt in einen Zeiger auf das erste Element und der wird dereferenziert. Das Ergebnis erklärt sich dann von selbst.</p>
<p>Übrigens lauern bei den echten Arrays Tücken, die man nur durch leidige Selbsterfahrung herausfindet (oder in dem man seine Zeit mit einem guten C++-Buch verbringt, ich empfehle den Primer).<br />
Daher auch die ganzen Vorschläge zu<a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow"> <code>std::vector</code> </a>und Konsorten.</p>
<blockquote>
<pre><code>Something* c[5] /* = ...*/;
auto z = *c; //welche Typ und Wert hat z?
</code></pre>
</blockquote>
<p>dito. Tricky ist hier höchstens, dass in der Deklaration ein Zeiger auftaucht, aber für solche Sachen gibt es <a href="http://cdecl.org/" rel="nofollow">cdecl.org</a>.</p>
<blockquote>
<p>In der Programmierung ist Ausprobieren oft eine schlechte Technik.</p>
</blockquote>
<p>Das schlimmste dabei ist auch noch, wenn es durch ausprobieren auf einmal funktioniert... <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="😃"
    /><br />
Denn dann verstecken sich, gerade wenn man den Code nicht verstanden hat, z. T. Bugs darin...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270784</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:26:24 GMT]]></title><description><![CDATA[<p>Ich glaube, pumuckl hat diese Fragen nicht gestellt, damit du zeigen kannst, dass du Arrays verstehst. Das glauben wir dir auch so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270787</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 14:31:41 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich glaube, pumuckl hat diese Fragen nicht gestellt, damit du zeigen kannst, dass du Arrays verstehst. Das glauben wir dir auch so.</p>
</blockquote>
<p>Nein, das war für den TE, weil er sich sowieso nicht die Mühe macht, die Fragen zu recherchieren oder sich damit auseinanderzusetzen.</p>
<p>Kannst es ja rauseditieren wenn du anderer Meinung bist. <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/2270789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270789</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 14:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 15:38:34 GMT]]></title><description><![CDATA[<p>Eigentlich ist schon alles gesagt, aber ich finde Sones Unterstellung unter aller Kanone und wollte nicht, dass die den Abschluss dieses Threads bildet...</p>
<p>moon12 schrieb:</p>
<blockquote>
<p>Ein kleiner Hinweis, wie ich den Code zum Laufen bringen kann wäre zum Verständnis toll.</p>
</blockquote>
<p>Warum versuchst Du nicht erstmal eine Variante ohne Pointer. Also</p>
<pre><code class="language-cpp">class A{
  B array_von_obj[5];
  //...
};
</code></pre>
<p>Dann wird einiges einfacher.<br />
Dann merk Dir, dass wenn Du arrays Übergibst diese zu einem Pointer auf das erste Element zerfallen. D.h. dass Array oben wird als <code>B*</code> übergeben - ohne Längeninformation! Die musst Du in einem zweiten Parameter mitschicken.<br />
D.h. Cs C'tor koennte so aussehen:</p>
<pre><code class="language-cpp">class C{
  public:
    C(B*, size_t);
  //...
};
</code></pre>
<p>Wenn Du das alles hast und willst es dann mit Pointern versuchen: soll C eine Kopie der Pointer vorhalten, oder Pointer auf neue Objekte? Wer gibt den allozierten Speicher wieder frei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270816</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 14 Nov 2012 15:38:34 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 15:44:25 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28547">@Sone</a>:<br />
Das möchte ich dezent zurückweisen <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="🙂"
    /> Ich verstehe, dass eure Erfahrungen einschlägig sein mögen, ich habe aber z.B. in der Tat die geposteten Fragen zu beantworten versucht, nur war ich lange nicht so schnell wie Du ^^ Trotzdem Danke!</p>
<p>Ich habe mir ein Konstrukt mit Vektoren gebaut und übergebe diese &quot;by value&quot;, mit der Überlegung, die Klasse, die übergibt, vll später löschen zu können und alles als member in der annehmenden Klasse zu haben...<br />
Um Kritik zum Code wäre ich dankbar:</p>
<pre><code>#include&lt;vector&gt;
#include&quot;B.h&quot;

class A
{
    vector&lt;B&gt; myBvector;
    vector&lt;B&gt; myAfunction()
    {
        for(...)
        myBvector.push_back(B(...));
        return myBvector;
    }
};
</code></pre>
<pre><code>class B {};
</code></pre>
<pre><code>#include&lt;vector&gt;
#include&quot;B.h&quot;

class C
{
    vector&lt;B&gt; newvector;
    C(vector&lt;B&gt;);
};

C::C(vector&lt;B&gt; fromA)
{
    newvector = fromA;
}
</code></pre>
<pre><code>int main()
{
A a();
C c(a.myAfunction() );
return 0;
}
</code></pre>
<p>Das ganze kann ich fehlerfrei kompillieren und liefert soweit ich das abschätzen kann, genau was ich wollte<br />
gruß, moon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270819</guid><dc:creator><![CDATA[moon12]]></dc:creator><pubDate>Wed, 14 Nov 2012 15:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 15:48:44 GMT]]></title><description><![CDATA[<p>Sieht ok aus, guck dir aber noch dringend einmal an, was eine Initialisierungsliste ist.</p>
<p>Wenn du noch Zuckerguss draufmachen möchtest: In C++ legt man sich bei Funktionsparametern ungern auf Containertypen fest. Stattdessen übergibt man (templatisierte) Iteratoren auf Anfang und Ende. Damit kann man beliebige Arten von Daten an C übergeben, nicht bloß vectoren. Und es entfällt eine unnötige, teure Kopie, von der ich mir gerade nicht sicher bin, ob sie wegoptimiert werden kann.<br />
Also zusammenfassend:</p>
<pre><code>template&lt;typename Iterator&gt; C(Iterator begin, Iterator end): newvector(begin, end) {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2270822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270822</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Nov 2012 15:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:06:58 GMT]]></title><description><![CDATA[<p>stimmt etwas mit meinen Initialisierungen nicht?<br />
bei &quot;...&quot; steht natürlich in echt was anderes. Oder ist die Objektinstanziierung von a mit einem Funktionsaufruf als Paramter unschön?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270830</guid><dc:creator><![CDATA[moon12]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:04:30 GMT]]></title><description><![CDATA[<p>moon12 schrieb:</p>
<blockquote>
<p>stimmt etwas mit meinen Initialisierungen nicht?</p>
</blockquote>
<p>Es tut schon stimmen.</p>
<p>Aber es geht halt noch viel besser, und deswegen solltest du dir Initialisierungslisten anschaun'.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Sind Templates/Iteratorenmodell nicht ein wenig zu weit gegriffen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270831</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:08:01 GMT]]></title><description><![CDATA[<p>stimmt wohl, ich hab zwar schon einiges zur Templateprogrammierung gelesen, aber das ist auf jeden Fall noch zu hoch. Ich denke ich machs mir einfacher, wenn ich das erstmal weglasse.</p>
<p>noch eine Frage:<br />
Gehe ich richtig in der Annahme, dass der Speicher bei Programmende automatisch freigegeben wird und damit auch die im Vektor gespeicherten Elemente ?!<br />
D.h. ich muss nicht extra die Objekte im Vektor löschen (erase / delete)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270833</guid><dc:creator><![CDATA[moon12]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:12:20 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Sind Templates/Iteratorenmodell nicht ein wenig zu weit gegriffen?</p>
</blockquote>
<p>Ja, aber man kann ja mal einen Ausblick geben. Im Moment fehlt nur die Initialisierungsliste, damit es &quot;ok&quot; ist.</p>
<p>moon12 schrieb:</p>
<blockquote>
<p>noch eine Frage:<br />
Gehe ich richtig in der Annahme, dass der Speicher bei Programmende automatisch freigegeben wird und damit auch die im Vektor gespeicherten Elemente ?!</p>
</blockquote>
<p>Jain. Automatisch freigegeben: Ja. Aber nicht zum Programmende, sondern dann, wenn der Vector aus dem Scope (Gültigkeitsbereich) geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270835</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:14:59 GMT]]></title><description><![CDATA[<p>moon12 schrieb:</p>
<blockquote>
<p>stimmt etwas mit meinen Initialisierungen nicht?</p>
</blockquote>
<p>Es stimmt in sofern nicht, das es keine Initialisierungen, sondern nachträgliche Zuweisungen sind. Im Konstruktorrumpf existieren die Werte bereits. Die einzige Stelle beim Konstruktor an der man Initialisieren kann ist die Initialisierungsliste.</p>
<p>Das mag bei integralen Datentypen unproblematisch sein, bei Objekten rufst du so statt einen Konstruktor in der Regel 2 Konstruktoren und ein Zuweisungsoperator auf (was bei vielen und großen Objekten durchaus Unterschiede machen kann). Zudem kann man Referenzen und Konstanten als Membervariablen ausschließlich in der Initialisierungsliste setzen. Ebenso erzwingst du Standardkonstruktoren bei Objekten.</p>
<pre><code>class A {} // &lt;-- Irgendein komplexes Element.

class B
{
  private:
    A a;

  public:
    // Fall 1: Ohne Initialisierungsliste.
    B()
    { // &lt;-- Hier wird der Standardkonstruktor von a aufgerufen.
        a = A(123); // &lt;-- Zuweisungsoperator + weiterer Konstruktoraufruf
    }

    // Fall 2: Mit Initialisierungsliste
    B()
    : a(123) // &lt;-- Ein Konstruktoraufruf, zudem auch anderer als Standardkonstruktor möglich
    {
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2270837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270837</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:22:08 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<pre><code>a = A(123); // &lt;-- Zuweisungsoperator + weiterer Konstruktoraufruf
</code></pre>
</blockquote>
<p>Das mit dem weiteren Konstruktoraufruf bezweifle ich. Die Temporary darf hier doch elidiert werden, oder nicht?</p>
<p>Edit: Hmm, kann sein, dass das nur der Fall ist wenn ein entsprechender Ctor vorhanden ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270839</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:31:16 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<pre><code>a = A(123); // &lt;-- Zuweisungsoperator + weiterer Konstruktoraufruf
</code></pre>
</blockquote>
<p>Das mit dem weiteren Konstruktoraufruf bezweifle ich. Die Temporary darf hier doch elidiert werden, oder nicht?</p>
</blockquote>
<ul>
<li>Grundsätzlich gehe ich niemals von Compileroptimierungen bei Beschreibungen aus. Wenn diese greifen, schön und gut, aber zu wissen was im schlechten Fall passieren <strong>kann</strong> ist etwas anderes.</li>
<li>Kann ich mir das hier nicht ganz vorstellen (außer vielleicht durch C++11, da ich mich mit Movesemantik etc. noch nicht großartig beschäftigt habe - beruflich wäre ich froh wenn der verwendete Compiler schon mit dem Standard davor weitgehend kompatibel wäre [Ins Besondere bei Templates]).</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2270843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270843</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:31:16 GMT</pubDate></item><item><title><![CDATA[Reply to C++: Objekte übergeben on Wed, 14 Nov 2012 16:32:01 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<pre><code>a = A(123); // &lt;-- Zuweisungsoperator + weiterer Konstruktoraufruf
</code></pre>
</blockquote>
<p>Das mit dem weiteren Konstruktoraufruf bezweifle ich. Die Temporary darf hier doch elidiert werden, oder nicht?</p>
</blockquote>
<ul>
<li>Grundsätzlich gehe ich niemals von Compileroptimierungen bei Beschreibungen aus. Wenn diese greifen, schön und gut, aber zu wissen was im schlechten Fall passieren <strong>kann</strong> ist etwas anderes.</li>
<li>Kann ich mir das hier nicht ganz vorstellen (außer vielleicht durch C++11, da ich mich mit Movesemantik etc. noch nicht großartig beschäftigt habe - beruflich wäre ich froh wenn der verwendete Compiler schon mit dem Standard davor weitgehend kompatibel wäre [Ins Besondere bei Templates]).</li>
</ul>
</blockquote>
<p><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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270844</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 14 Nov 2012 16:32:01 GMT</pubDate></item></channel></rss>