<?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[Was passiert mit diesen anonymen Objekten?]]></title><description><![CDATA[<p>Servus,</p>
<p>was passiert eigentlich, wenn man ein anonymes Objekt daklariert und darauf was macht?</p>
<p>Hintergrund ist eine Klasse, die zum konstruieren von Logmessages dient und dafür einen komfortablen Stream-Mechanismus bereitstellt:</p>
<pre><code class="language-cpp">class Log {
public:
    Log();

    static Log&amp; Info(Log&amp; log);
//...
    static Log&amp; endl(Log&amp; log);
//....
    Log&amp; operator&lt;&lt;(const std::string&amp; s);
    Log&amp; operator&lt;&lt;(Log&amp; (*f)(Log&amp;));
private
    Writer&amp; m_writer;
    std::ostringstream m_stream;
};
</code></pre>
<p>Der Trick bei der Klasse ist, dass sie eigentlich nur den Stream zusammenbastelt und dann das Ergebnis an den Writer postet, der es wiederum in eine Threadsafe-Queue einfügt, um es dann später wegeschreiben zu können.</p>
<p>Damit das funktioniert, muss ich für jeden Logeintrag ja ein Objekt vom Typ Log erzeugen:</p>
<pre><code class="language-cpp">Log() &lt;&lt; Log::Info &lt;&lt; &quot;Das ist eine Info message &quot; &lt;&lt; 42 &lt;&lt; Log::endl;
Log() &lt;&lt; Log::Error &lt;&lt; &quot;Das ist ein Error:&quot; &lt;&lt; 3.14159 &lt;&lt; Log::endl;
</code></pre>
<p>Was passiert mit diesen anonymen Objekten? Leben die solange wie der Scope einer lokalen, nicht-anonymen Variable wäre?</p>
<p>Gruß,<br />
Phil</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264245/was-passiert-mit-diesen-anonymen-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 03:57:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264245.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Apr 2010 23:14:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was passiert mit diesen anonymen Objekten? on Sun, 04 Apr 2010 23:14:27 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>was passiert eigentlich, wenn man ein anonymes Objekt daklariert und darauf was macht?</p>
<p>Hintergrund ist eine Klasse, die zum konstruieren von Logmessages dient und dafür einen komfortablen Stream-Mechanismus bereitstellt:</p>
<pre><code class="language-cpp">class Log {
public:
    Log();

    static Log&amp; Info(Log&amp; log);
//...
    static Log&amp; endl(Log&amp; log);
//....
    Log&amp; operator&lt;&lt;(const std::string&amp; s);
    Log&amp; operator&lt;&lt;(Log&amp; (*f)(Log&amp;));
private
    Writer&amp; m_writer;
    std::ostringstream m_stream;
};
</code></pre>
<p>Der Trick bei der Klasse ist, dass sie eigentlich nur den Stream zusammenbastelt und dann das Ergebnis an den Writer postet, der es wiederum in eine Threadsafe-Queue einfügt, um es dann später wegeschreiben zu können.</p>
<p>Damit das funktioniert, muss ich für jeden Logeintrag ja ein Objekt vom Typ Log erzeugen:</p>
<pre><code class="language-cpp">Log() &lt;&lt; Log::Info &lt;&lt; &quot;Das ist eine Info message &quot; &lt;&lt; 42 &lt;&lt; Log::endl;
Log() &lt;&lt; Log::Error &lt;&lt; &quot;Das ist ein Error:&quot; &lt;&lt; 3.14159 &lt;&lt; Log::endl;
</code></pre>
<p>Was passiert mit diesen anonymen Objekten? Leben die solange wie der Scope einer lokalen, nicht-anonymen Variable wäre?</p>
<p>Gruß,<br />
Phil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877667</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Sun, 04 Apr 2010 23:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert mit diesen anonymen Objekten? on Mon, 05 Apr 2010 09:02:23 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Was passiert mit diesen anonymen Objekten? Leben die solange wie der Scope einer lokalen, nicht-anonymen Variable wäre?</p>
</blockquote>
<p>Nein. Temporäre Objekte leben nur innerhalb des Ausdrucks, in dem sie ausgewertet werden. Nach dem ; wird also der Destruktor aufgerufen, das zweite <code>Log()</code> erstellt ein neues Objekt.</p>
<p>Ausnahmen sind temporäre RValues, die zur initialisierung von lokalen Const-Referenzen verwendet werden. Diese besitzen die Lebensdauer der Referenz selber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877718</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert mit diesen anonymen Objekten? on Mon, 05 Apr 2010 09:20:23 GMT]]></title><description><![CDATA[<p>Danke, das wollte ich wissen <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/1877729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877729</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Mon, 05 Apr 2010 09:20:23 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert mit diesen anonymen Objekten? on Mon, 05 Apr 2010 10:06:47 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Der Trick bei der Klasse ist, dass sie eigentlich nur den Stream zusammenbastelt und dann das Ergebnis an den Writer postet, der es wiederum in eine Threadsafe-Queue einfügt, um es dann später wegeschreiben zu können.</p>
</blockquote>
<p>PhilippM schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Log() &lt;&lt; Log::Info &lt;&lt; &quot;Das ist eine Info message &quot; &lt;&lt; 42 &lt;&lt; Log::endl;
</code></pre>
</blockquote>
<p>Das ist aber hübsch. Sowas könnte ich auch für die Konsole brauchen, damit sich die Ausgaben der Threads nicht mehr Zeichenweise mischen, sondern Programmierzeilenweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877748</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 05 Apr 2010 10:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert mit diesen anonymen Objekten? on Mon, 05 Apr 2010 10:15:11 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>...damit sich die Ausgaben der Threads nicht mehr Zeichenweise mischen, sondern Programmierzeilenweise.</p>
</blockquote>
<p>LOL.</p>
<p>Ich versuche, aus diesen beiden Klassen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-263897.html" rel="nofollow">Loggen mit Stream</a><br />
<a href="http://c-plusplus.net/forum/viewtopic-var-t-is-254499-and-highlight-is-singleton.html" rel="nofollow">Log-System in einer multithreaded Anwendung</a></p>
<p>den ultimativen stream-multithread-logger zu bauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877751</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Mon, 05 Apr 2010 10:15:11 GMT</pubDate></item></channel></rss>