<?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[Impliziter Konstruktoraufruf]]></title><description><![CDATA[<p>Hallo!</p>
<p>mal folgendes angenommen:</p>
<pre><code class="language-cpp">vector&lt;Typ&gt; vektor;
vektor.push_back(Typ());
</code></pre>
<p>Was passiert da überhaupt genau?</p>
<p>Wird der Speicher für das Objekt zunächst auf dem Stack reserviert und dann ein Kopie auf dem Heap angelegt und der this-Zeiger dem Vektor übergeben?<br />
Was passiert mit dem Objekt auf dem Stack wenn das so ist?</p>
<p>Danke für die Aufklärung!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191208/impliziter-konstruktoraufruf</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 23:22:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191208.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Aug 2007 11:16:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:16:29 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>mal folgendes angenommen:</p>
<pre><code class="language-cpp">vector&lt;Typ&gt; vektor;
vektor.push_back(Typ());
</code></pre>
<p>Was passiert da überhaupt genau?</p>
<p>Wird der Speicher für das Objekt zunächst auf dem Stack reserviert und dann ein Kopie auf dem Heap angelegt und der this-Zeiger dem Vektor übergeben?<br />
Was passiert mit dem Objekt auf dem Stack wenn das so ist?</p>
<p>Danke für die Aufklärung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355987</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:20:18 GMT]]></title><description><![CDATA[<p>Da wird ein temporäres Objekt angelegt und an die Methode übergeben. Am Ende der Anweisung fliegt dieses Objekt aus dem Scope - und wird demzufolge wieder vernichtet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355990</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:35:31 GMT]]></title><description><![CDATA[<p>Kopiert push_back() also das Objekt?</p>
<p>Sollte man deswegen lieber nur Zeiger zu Objekten z.B. in einem vector&lt;T&gt; speichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356006</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:46:14 GMT]]></title><description><![CDATA[<p>Kommt ganz auf den Typ an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356012</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:46:14 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:49:06 GMT]]></title><description><![CDATA[<p>push_back kopiert die Objekte. Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.<br />
[edit]<br />
Das kannst du auch leicht selbst prüfen, indem du in Konstruktor, Destruktor, CopyCtor und Zuweisungsoperator deiner Klasse/Struct Ausgaben einbaust.<br />
[edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356013</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:49:08 GMT]]></title><description><![CDATA[<p>Der Typ soll ein Klassenobjekt sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356017</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:52:11 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>push_back kopiert die Objekte. Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.<br />
[edit]<br />
Das kannst du auch leicht selbst prüfen, indem du in Konstruktor, Destruktor, CopyCtor und Zuweisungsoperator deiner Klasse/Struct Ausgaben einbaust.<br />
[edit]</p>
</blockquote>
<p>Aha, ist es also empfehlenswerter mit Containern von Zeigern zu arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356020</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:53:55 GMT]]></title><description><![CDATA[<p>Ich handhabe das meistens so, dass ich die builtin-typen direkt an einen vector anhänge:</p>
<pre><code class="language-cpp">v.push_back(12);
</code></pre>
<p>Bei &quot;eigenen Objekten&quot; verwende ich Zeiger:</p>
<pre><code class="language-cpp">v.push_back(&amp;myobj);
</code></pre>
<p>Man muss natürlich im Auge behalten, dass der Zeiger nicht gerade auf ein Objekt zeigt, dass im &quot;nächsten Moment&quot; aus dem Scope fällt und zerstört wird.</p>
<p>Ansonsten verwende ich hin und wieder mal &quot;fire&amp;forget&quot;-Aufrufe:</p>
<pre><code class="language-cpp">log.push_back(new Message(&quot;Don't forget to delete this one, after usage!&quot;));
</code></pre>
<p>... aus der Sicht eines newb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356022</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:56:13 GMT]]></title><description><![CDATA[<p>Karatekatze schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>push_back kopiert die Objekte. Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.<br />
[edit]<br />
Das kannst du auch leicht selbst prüfen, indem du in Konstruktor, Destruktor, CopyCtor und Zuweisungsoperator deiner Klasse/Struct Ausgaben einbaust.<br />
[edit]</p>
</blockquote>
<p>Aha, ist es also empfehlenswerter mit Containern von Zeigern zu arbeiten?</p>
</blockquote>
<p>nein. Voreilige Optimierung ist die Wurzel allen Übels. Kopierphobie ebenfalls.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356024</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:58:54 GMT]]></title><description><![CDATA[<p>Karatekatze schrieb:</p>
<blockquote>
<p>Aha, ist es also empfehlenswerter mit Containern von Zeigern zu arbeiten?</p>
</blockquote>
<p>Nein. Das mußt du von Fall zu Fall selbst entscheiden. Zeiger in Container bringen ganz eigene Schwierigkeiten mit sich, wie Gültigkeitsprüfungen, Deallokation etc.<br />
Dies kann man mit Containern auf Smart_Pointern oder auch boost::Pointer_Container zwar verbessern, allerdings steigt der Aufwand.</p>
<p>[edit]<br />
Hier</p>
<pre><code class="language-cpp">vektor.push_back(Typ());
</code></pre>
<p>wird mit ziemlicher Sicherheit nicht kopiert, sondern gleich im vector konstruiert.<br />
Wie ich schon sagte, Probiers aus.<br />
[edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356026</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 11:59:38 GMT]]></title><description><![CDATA[<p>Verwende Zeiger, wenn damit eine eigene Bedeutung verknüpft ist; als bloße Optimierung ist es in der Regel verfehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356029</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 11:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 12:01:25 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.</p>
</blockquote>
<p>Im besagten Falle, ist es ihm sogar verboten, das zu tun (wenn der Kopiervorgang beobachtbar ist versteht sich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356031</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 12:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 12:20:29 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.</p>
</blockquote>
<p>Im besagten Falle, ist es ihm sogar verboten, das zu tun (wenn der Kopiervorgang beobachtbar ist versteht sich).</p>
</blockquote>
<p>Wie meinst du das?</p>
<p>Bei Debug jedenfalls ruft er den copy ctor auf.<br />
Kann er den Kopieraufruf herausoptimieren z.B. wenn ich keinen definiere?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356042</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 12:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 12:26:52 GMT]]></title><description><![CDATA[<p>Um den Copy-Ctor aufzurufen muss er was zum kopieren haben. In dem genannten Fall müssten also nacheinander Ctor, Copy-Ctor, Dtor aufgerufen werden.</p>
<p>Wenn Du keinen Copy-Ctor definierst, definiert der Compiler einen, der für jedes Element den Copy-Ctor aufruft. Geht das nicht, weil die Klasse oder eines der Elemente einen privaten Copy-Ctor hat, wirst Du einen Compilefehler bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356044</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 31 Aug 2007 12:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 16:20:25 GMT]]></title><description><![CDATA[<p>Hmm... ich verstehe immer noch nicht.</p>
<pre><code class="language-cpp">struct Daten
{
   int a;
   int b;
};

class Typ
{
   private:
     int zahl;
     vector&lt;Daten&gt; datenVektor;

   public:
     Typ(int z) {zahl=z; datenVektor.push_back(holeDaten(z));}
     ~Typ() {datenVektor.clear();}
}

Irgendwo::MacheEtwas()
{
  vector&lt;Typ&gt; typVektor;
  typVektor.push_back(Typ(1));
  typVektor.push_back(Typ(2));
}
</code></pre>
<p>Hier kopiert er korrekt die Objekte in den Vektor, obwohl der Typ ein nicht primitives Datenelement (Vektorcontainer mit Strukturelementen) enthält.<br />
Wieso funktioniert das, wo doch kein Copy-Ctor für &lt;Typ&gt; definiert ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356268</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 16:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 16:27:28 GMT]]></title><description><![CDATA[<p>Ich meine der standard Copy-Ctor für &lt;Typ&gt; dürfte das doch gar nicht können.<br />
Oder doch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356276</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 16:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 16:33:52 GMT]]></title><description><![CDATA[<p>Legst du keinen Copy-Ctor an erstellt der Kompiler einen. Hat bestimmt schon einer hier gesagt.<br />
Und wie macht er das? Er ruft für jeden Member den Copy-Ctor auf. Da der Copy-Ctor von std::vector definiert ist und auch das tut, was man von ihm erwartet, reicht in dem Beispiel der vom Kompiler gestellte Kopier-Konstruktor.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356281</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Fri, 31 Aug 2007 16:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 16:48:13 GMT]]></title><description><![CDATA[<p>Karatekatze schrieb:</p>
<blockquote>
<p>, wo doch kein Copy-Ctor für &lt;Typ&gt; definiert ist?</p>
</blockquote>
<p>Dem ist nicht so. Immer dann, wenn du nicht selbst einen Copy-Ctor deklarierst, macht der Compiler das für dich (deshalb ist es richtig zu sagen, das <em>jede</em> (definierte) Klasse einen Copy-Ctor hat). Die genaue Signatur dieses implizit deklarierten Copyctors hängt dabei von den Kopierkonstruktoren der direkten und virtuellen Basen und den Membern der Klasse ab. Wenn diese alle einen Kopierkonstruktor mit der Signatur<br />
T(const T&amp;) oder T(const volatile T&amp;) haben [bzw. es sich bei Membern um skalare Typen handelt oder bei Arrays dies (ggf. rekursiv anzuwenden) für die Elemente gilt], so hat der implizit deklarierte Kopierkonstruktor unserer Klasse U die Form<br />
U(const U&amp;) andernfalls hat er die Form U(U&amp;)<br />
Dieser implizit deklarierte Kopierkonstruktor ist public und inline.</p>
<p>Implizit <em>definiert</em> wird dieser implizit deklarierte Kopierkonstruktor bei der ersten Benutzung desselben - inhaltlich ruft dieser die jeweiligen Kopierkonstruktoren seiner Basen und Member auf. Nun kann es passieren, dass auf einen Kopierkonstruktor einer Basis oder eines Members nicht zugegriffen werden kann, weil dieser private oder bei Membern auch protected ist. Dann ist an dieser Stelle (an der unser Kopierkonstruktor definiert werden muss) ein Fehler und der Compiler muss dies diagnostizieren.</p>
<p>Mit kleinen Abweichung gilt dies alles sinngemäß auch für den Kopieroperator= - dieser wird ebenfalls ggf. implizit deklariert. Weil er gleichzeitig alle geerbten Kopieroperatoren verdeckt, entsteht leicht der Eindruck, diese würden nicht geerbt. Dem ist aber nicht so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356288</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 16:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 16:55:09 GMT]]></title><description><![CDATA[<p>OK, Danke für die Erklärungen!</p>
<p>Was mich aber stutzig macht ist dass der Copy-Ctor der STL-Container auch für Elemente des Typs struct definiert ist.<br />
Macht er da ein memcopy oder was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356295</guid><dc:creator><![CDATA[Karatekatze]]></dc:creator><pubDate>Fri, 31 Aug 2007 16:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 17:11:35 GMT]]></title><description><![CDATA[<p>Karatekatze schrieb:</p>
<blockquote>
<p>OK, Danke für die Erklärungen!</p>
<p>Was mich aber stutzig macht ist dass der Copy-Ctor der STL-Container auch für Elemente des Typs struct definiert ist.<br />
Macht er da ein memcopy oder was?</p>
</blockquote>
<p>Er kopiert elementweise - technisch läuft das auf placement new hinaus, weil es ja keinen Weg gibt (außer in Initialisierungslisten), einen Konstruktor explizit aufzurufen. memcpy &amp; Co. produziert erstens meist undefiniertes Verhalten und würde auch oft das Falsche machen. Gerade dort, wo wir den Copy-ctor selbst definieren, machen wir das weil der implizit definierte ctor das Falsche machen würde - und das wäre bei memcpy nicht anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356304</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 17:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 19:06:30 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.</p>
</blockquote>
<p>Im besagten Falle, ist es ihm sogar verboten, das zu tun (wenn der Kopiervorgang beobachtbar ist versteht sich).</p>
</blockquote>
<p>Bist du sicher? Soweit ich weiß dürfen Kopiekonstrktor-Aufrüfe ausdrücklich auch sonst weg optimiert werden. Eine solche Sonderreglung gibt es, ob sie allerdings hier zutrifft weiß ich nicht.</p>
<p>Der Compiler muss natürlich immer noch prüfen ob der Kopiekonstrktor aufgerufen werden könnte allerdings braucht er ihn anschließend nicht aufzurufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356391</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 31 Aug 2007 19:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 19:23:35 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Im genannten Fall sollte der Compiler aber so schlau sein und nur den Konstruktor aufrufen.</p>
</blockquote>
<p>Im besagten Falle, ist es ihm sogar verboten, das zu tun (wenn der Kopiervorgang beobachtbar ist versteht sich).</p>
</blockquote>
<p>Bist du sicher? Soweit ich weiß dürfen Kopiekonstrktor-Aufrüfe ausdrücklich auch sonst weg optimiert werden. Eine solche Sonderreglung gibt es, ob sie allerdings hier zutrifft weiß ich nicht.</p>
<p>Der Compiler muss natürlich immer noch prüfen ob der Kopiekonstrktor aufgerufen werden könnte allerdings braucht er ihn anschließend nicht aufzurufen.</p>
</blockquote>
<p>es gibt nur zwei Fälle, in denen es erlaubt ist:</p>
<blockquote>
<p>This elision of copy operations is permitted in the following circumstances (which may be combined to eliminate multiple copies):<br />
— in a return statement in a function with a class return type, when the expression is the name of a non-volatile automatic object with the same cv-unqualified type as the function return type, the copy<br />
operation can be omitted by constructing the automatic object directly into the function’s return value<br />
— when a temporary class object that has not been bound to a reference (12.2) would be copied to a class object with the same cv-unqualified type, the copy operation can be omitted by constructing the temporary object directly into the target of the omitted copy</p>
</blockquote>
<p>Wir haben es nicht mit einem return statement zu tun - also trifft der erste Fall nicht zu.<br />
Der zweite Fall trifft ebenfalls nicht zu, denn unser Objekt wurde (beim Funktionsaufruf) an eine Referenz gebunden. verbleibt nur noch die as-if Regel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356404</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 19:23:35 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 20:34:32 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Er kopiert elementweise - technisch läuft das auf placement new hinaus, weil es ja keinen Weg gibt (außer in Initialisierungslisten), einen Konstruktor explizit aufzurufen. memcpy &amp; Co. produziert erstens meist undefiniertes Verhalten und würde auch oft das Falsche machen.</p>
</blockquote>
<p>Nur funktioniert das sogar mit Typen die z.B. Arrays beinhalten.<br />
Wie das?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356461</guid><dc:creator><![CDATA[sqrt(-1)]]></dc:creator><pubDate>Fri, 31 Aug 2007 20:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 21:17:24 GMT]]></title><description><![CDATA[<p>sqrt(-1) schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Er kopiert elementweise - technisch läuft das auf placement new hinaus, weil es ja keinen Weg gibt (außer in Initialisierungslisten), einen Konstruktor explizit aufzurufen. memcpy &amp; Co. produziert erstens meist undefiniertes Verhalten und würde auch oft das Falsche machen.</p>
</blockquote>
<p>Nur funktioniert das sogar mit Typen die z.B. Arrays beinhalten.<br />
Wie das?!</p>
</blockquote>
<p>Weil für das Kopieren des Memberarrays der Kopierkonstruktor des betreffenden Typen, der das Array enthält zuständig ist. Der vector kriegt davon gar nichts mit. Im Gegensatz dazu kann aber ein Array nicht selbst Element eines vector sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356501</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 31 Aug 2007 21:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 21:38:58 GMT]]></title><description><![CDATA[<p>Wie läuft das dann bei einem Array ab?<br />
Werden dann also alle Elemente einzeln kopiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356519</guid><dc:creator><![CDATA[sqrt(-1)]]></dc:creator><pubDate>Fri, 31 Aug 2007 21:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to Impliziter Konstruktoraufruf on Fri, 31 Aug 2007 21:50:46 GMT]]></title><description><![CDATA[<p>Der Standard sagt: &quot;- wenn das Subobjekt ein Feld ist, wird jedes Element so kopiert, wie es passend zum Elementtyp ist;&quot;</p>
<p>Also wird scheinbar tatsächlich jedes Element einzeln kopiert.<br />
Ob der Compiler da optimiert? Naja...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356528</guid><dc:creator><![CDATA[sqrt(-1)]]></dc:creator><pubDate>Fri, 31 Aug 2007 21:50:46 GMT</pubDate></item></channel></rss>