<?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[Code zu schnell?]]></title><description><![CDATA[<p>Wie kann folgendes möglich sein:</p>
<pre><code class="language-cpp">MyClass::MyClass()
{
    std::cout &lt;&lt; &quot;--&gt; MyClass::MyClass()&quot; &lt;&lt; std::endl;

    // some long operations

    std::cout &lt;&lt; &quot;&lt;-- MyClass::MyClass()&quot; &lt;&lt; std::endl;
}

void MyClass::func()
{
    std::cout &lt;&lt; &quot;--&gt; MyClass::func()&quot; &lt;&lt; std::endl;

    // foooooo

    std::cout &lt;&lt; &quot;&lt;-- MyClass::func()&quot; &lt;&lt; std::endl;
}

.
.
.

int main()
{
    MyClass* cl( new MyClass() );

    cl-&gt;func();
}

// Ausgabe:
--&gt; MyClass::MyClass()
--&gt; MyClass::func()
...
&lt;-- MyClass::MyClass()
</code></pre>
<p>kurz: warum wird die Methode aufgerufen, bevor der Konstruktor fertig ist? Oder leide ich an Hirngespinsten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233945/code-zu-schnell</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 14:37:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233945.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Feb 2009 09:33:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 09:33:01 GMT]]></title><description><![CDATA[<p>Wie kann folgendes möglich sein:</p>
<pre><code class="language-cpp">MyClass::MyClass()
{
    std::cout &lt;&lt; &quot;--&gt; MyClass::MyClass()&quot; &lt;&lt; std::endl;

    // some long operations

    std::cout &lt;&lt; &quot;&lt;-- MyClass::MyClass()&quot; &lt;&lt; std::endl;
}

void MyClass::func()
{
    std::cout &lt;&lt; &quot;--&gt; MyClass::func()&quot; &lt;&lt; std::endl;

    // foooooo

    std::cout &lt;&lt; &quot;&lt;-- MyClass::func()&quot; &lt;&lt; std::endl;
}

.
.
.

int main()
{
    MyClass* cl( new MyClass() );

    cl-&gt;func();
}

// Ausgabe:
--&gt; MyClass::MyClass()
--&gt; MyClass::func()
...
&lt;-- MyClass::MyClass()
</code></pre>
<p>kurz: warum wird die Methode aufgerufen, bevor der Konstruktor fertig ist? Oder leide ich an Hirngespinsten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661563</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Wed, 11 Feb 2009 09:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 09:38:43 GMT]]></title><description><![CDATA[<p>Also ich bekomme folgende Ausgabe:</p>
<pre><code>--&gt; MyClass::MyClass()
&lt;-- MyClass::MyClass()
--&gt; MyClass::func()
&lt;-- MyClass::func()
</code></pre>
<p>Entspricht doch dem was du erwartest oder nicht?<br />
Zuerst der Ctor, dann die Funktion.</p>
<p><strong>EDIT:Wenn man davon ausgeht, es läuft wirklich so ab wie oben aufgezeigt.</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661569</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 11 Feb 2009 09:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 09:37:04 GMT]]></title><description><![CDATA[<p>func() wird anscheinend vom Konstruktor aufgerufen. Im 'some long operatins' Block.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661570</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Wed, 11 Feb 2009 09:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 09:40:36 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>Wie kann folgendes möglich sein:</p>
</blockquote>
<p>An sich sollte sowas nicht möglich sein, aber ich habe bereits auf alten Compilern ähnliche Probleme (in Kombination mit sehr schlechter Optimierung) gehabt. Dies lies sich auch nur dadurch lösen das man die Optimierungen teilweise deaktiviert hat.</p>
<p>Ansonsten kann ich mir sowas nur vorstellen wenn es sich um Multithreading und Unterschiedliche Instanzen handelt (Gib doch mal den this-Zeiger zusätzlich aus, um festzustellen ob es wirklich das gleiche Objekt ist).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661574</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 11 Feb 2009 09:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 09:50:34 GMT]]></title><description><![CDATA[<p>connan schrieb:</p>
<blockquote>
<p>func() wird anscheinend vom Konstruktor aufgerufen. Im 'some long operatins' Block.</p>
</blockquote>
<p>nein, wird es nicht...</p>
<p>aber ich hab hier schon einige konfuse Vorkommnisse gehabt, die ich mir nicht erklären konnte und deren Lösung sich jeder Logik entbehrt.... was genau das Proble mist, kann ich also nicht sagen... vielleicht hat der Compiler zu beherzt optimiert oder die Mondphase war ungünstig <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>
<p>Anderer Fall, den wir bei uns hatten:<br />
In einer init()-Methode, die vom Konstruktor aufgerufen wurde, wurde eine Combobox gefüllt. Kurz darauf wurde der Wert dieser Box ausgelesen und in einem SQL-String eingebaut. Funktioniert wunderbar, bis uns einige Kollegen einen SQL-Fehler gemeldet hatten, der darauf schließen lässt, dass die Combobox eben noch nicht befüllt war (war sie aber laut den Screenshots).<br />
Die Lösung: Es wurde ein neuer Link auf die Binary angelegt, über den die Anwendung gestartet wird. An der Anwendung selbst wurde nichts verändert und trotzdem ist das Problem seitdem nichtmehr aufgetreten.</p>
<p>Oberes Beispiel ist ähnlich.<br />
Ich selbst hatte auch schon das Problem, dass Ausgaben nicht in der Reihenfolge gemacht wurden, in der ich sie im Code hatte. Hab das aber auf ein Problem meiner IDE geschoben, die evtl was falsch auffängt. Bei einem Kollegen führte obiges aber zu einem Absturz, da der Pointer ungültig war (obwohl er es nicht sein dürfte).<br />
Evtl liegts auch daran, dass sich hinter &quot;some long operations&quot; auch diverse Dateizugriffe verbergen, die etwas dauern können</p>
<p>-edit- und ja, wir haben einige nicht sehr moderne Compiler am laufen (gcc 3.4.2)<br />
hat mich schon viel Ärger gekostet -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661578</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Wed, 11 Feb 2009 09:50:34 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 13:16:24 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>connan schrieb:</p>
<blockquote>
<p>func() wird anscheinend vom Konstruktor aufgerufen. Im 'some long operatins' Block.</p>
</blockquote>
<p>nein, wird es nicht...</p>
</blockquote>
<p>Dann bleiben eigentlich nur wenige Möglichkeiten:<br />
1. Entweder Optimiert der Compiler zu viel (Habe ich persönlich bislang nur mit wirklich alten Compilern wie den Power++ erlebt).<br />
2. Es handelt sich um verschiedene Objekte (z.B. durch Multithreading oder Eventhandling - zumindestens unter Windows kann manchmal in einer Singlethreaded Programm beim Eventhandling doch Multithreading auftreten...).<br />
3. Auch wenn man weder einen direkten noch indirekten Aufruf sieht ist doch einer im Konstruktor vorhanden (und übersehen).</p>
<p>zwutz schrieb:</p>
<blockquote>
<p>Evtl liegts auch daran, dass sich hinter &quot;some long operations&quot; auch diverse Dateizugriffe verbergen, die etwas dauern können</p>
</blockquote>
<p>Das darf aber eigentlich nur dann zu einer verkehrten Aufrufreihenfolge führen, wenn dies asynchrone Zugriffe sind.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661741</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 11 Feb 2009 13:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 13:30:54 GMT]]></title><description><![CDATA[<p>Sieh dir doch einfach mal den generierten Assemblercode an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661756</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 11 Feb 2009 13:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 15:40:08 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>connan schrieb:</p>
<blockquote>
<p>func() wird anscheinend vom Konstruktor aufgerufen. Im 'some long operatins' Block.</p>
</blockquote>
<p>nein, wird es nicht...</p>
<p>aber ich hab hier schon einige konfuse Vorkommnisse gehabt, die ich mir nicht erklären konnte und deren Lösung sich jeder Logik entbehrt.... was genau das Proble mist, kann ich also nicht sagen... vielleicht hat der Compiler zu beherzt optimiert oder die Mondphase war ungünstig <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>
<p>Anderer Fall, den wir bei uns hatten:<br />
In einer init()-Methode, die vom Konstruktor aufgerufen wurde, wurde eine Combobox gefüllt. Kurz darauf wurde der Wert dieser Box ausgelesen und in einem SQL-String eingebaut. Funktioniert wunderbar, bis uns einige Kollegen einen SQL-Fehler gemeldet hatten, der darauf schließen lässt, dass die Combobox eben noch nicht befüllt war (war sie aber laut den Screenshots).<br />
Die Lösung: Es wurde ein neuer Link auf die Binary angelegt, über den die Anwendung gestartet wird. An der Anwendung selbst wurde nichts verändert und trotzdem ist das Problem seitdem nichtmehr aufgetreten.</p>
<p>Oberes Beispiel ist ähnlich.<br />
Ich selbst hatte auch schon das Problem, dass Ausgaben nicht in der Reihenfolge gemacht wurden, in der ich sie im Code hatte. Hab das aber auf ein Problem meiner IDE geschoben, die evtl was falsch auffängt. Bei einem Kollegen führte obiges aber zu einem Absturz, da der Pointer ungültig war (obwohl er es nicht sein dürfte).<br />
Evtl liegts auch daran, dass sich hinter &quot;some long operations&quot; auch diverse Dateizugriffe verbergen, die etwas dauern können</p>
<p>-edit- und ja, wir haben einige nicht sehr moderne Compiler am laufen (gcc 3.4.2)<br />
hat mich schon viel Ärger gekostet -.-</p>
</blockquote>
<p>Vermutlich liegen all eure Probleme (oder zumindest die meisten) daran dass entweder<br />
a) das Programm voll mit grausamen Fehlern ist (fremden Speicher überschreiben, fehlende Synchronisation etc.) oder<br />
b) eure Hardware total im Eimer ist oder<br />
c) beides</p>
<p>Ich tippe auf (a). Ist ein Erfahrungswert.</p>
<p>Dass im ctor Dateizugriffe gemacht werden kann nicht das Problem sein -- du kannst im Prinzip das ganze Programm im ctor irgendeiner Klasse laufen lassen ohne dass irgendwelche Probleme auftreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661894</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Feb 2009 15:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Code zu schnell? on Wed, 11 Feb 2009 19:03:29 GMT]]></title><description><![CDATA[<p>Bin ebenfalls für a)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1662046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1662046</guid><dc:creator><![CDATA[MitTipper]]></dc:creator><pubDate>Wed, 11 Feb 2009 19:03:29 GMT</pubDate></item></channel></rss>