<?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[Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich bräuchte mal Hilfe zum <strong>2003</strong>er Standard.</p>
<p>Folgender Code:</p>
<pre><code>class A {
  X x_;

  X foo() {
    scope_guard&lt;Something&gt; guard;
    return x_;
  }  
};
</code></pre>
<p>Ist es <strong>garantiert</strong>, dass das Temporary für den return-Wert *vor* dem Destruktor des Scope-Guards ausgeführt wird?</p>
<p>Der 2003er Standard sagt in 6.6.3/3 nur &quot;the expression is evaluated just before the function returns to its caller.&quot;, was ich sehr schwammig finde. Zumal hier auch noch copy constructor elision reinspielen kann.</p>
<p>Falls es garantiert ist, bitte einen entsprechenden <strong>Verweis auf den Standard</strong>.</p>
<p>Danke &amp; Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319784/zusammenspiel-von-raii-mutex-und-return-standard-advokat-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 20:59:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319784.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Sep 2013 08:29:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht on Tue, 03 Sep 2013 08:29:34 GMT]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich bräuchte mal Hilfe zum <strong>2003</strong>er Standard.</p>
<p>Folgender Code:</p>
<pre><code>class A {
  X x_;

  X foo() {
    scope_guard&lt;Something&gt; guard;
    return x_;
  }  
};
</code></pre>
<p>Ist es <strong>garantiert</strong>, dass das Temporary für den return-Wert *vor* dem Destruktor des Scope-Guards ausgeführt wird?</p>
<p>Der 2003er Standard sagt in 6.6.3/3 nur &quot;the expression is evaluated just before the function returns to its caller.&quot;, was ich sehr schwammig finde. Zumal hier auch noch copy constructor elision reinspielen kann.</p>
<p>Falls es garantiert ist, bitte einen entsprechenden <strong>Verweis auf den Standard</strong>.</p>
<p>Danke &amp; Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349995</guid><dc:creator><![CDATA[@]]></dc:creator><pubDate>Tue, 03 Sep 2013 08:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht on Tue, 03 Sep 2013 09:22:24 GMT]]></title><description><![CDATA[<p>Der Ausdruck...</p>
<pre><code>return x_;
</code></pre>
<p>...wird in dem Wege ausgewertet, dass eine Kopie von <strong>x_</strong> erstellt und in die Zielvariable der Rückgabe gespeichert wird, danach wird die Funktion nicht forgesetzt. Folglich werden bei Beendigung der Funktion Destruktoren aufgerufen und anschließend wird zum Funktionsaufrufer zurückgekehrt.</p>
<blockquote>
<p>...the expression is evaluated just before the function returns to its caller.</p>
</blockquote>
<p>Diese Beschreibung ist somit doch ziemlich genau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350000</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Tue, 03 Sep 2013 09:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht on Tue, 03 Sep 2013 09:56:44 GMT]]></title><description><![CDATA[<p>Ich habe nur den C++11 Standard, aber</p>
<p>C++11 6.6.3/2 schrieb:</p>
<blockquote>
<p>The value of the expression is implicitly converted to the return type of the function in which it appears.</p>
</blockquote>
<p>müsste so auch im C++03er stehen.</p>
<p>Das bedeutet:</p>
<pre><code class="language-cpp">int main()
{
  A a;
  const X&amp; f = a.foo(); /*
    1. x_ wird implizit in X konvertiert -&gt; Kopierkonstruktor (ev. elided)
    2. Destruktor von guard wird aufgerufen (passiert garantiert nach dem return)
    3. return value wird an f gebunden, Lebenszeit verlängert, nichts passiert
  */
  X f2 = a.foo(); // hier Kopie-Guard-Kopie, eine Kopie davon kann elided werden
}
</code></pre>
<p>Dass das return-statement vor den Destruktoren (welche erst am Ende des Blocks aufgerufen werden) ausgeführt wird, sollte klar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350009</guid><dc:creator><![CDATA[einself]]></dc:creator><pubDate>Tue, 03 Sep 2013 09:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht on Tue, 03 Sep 2013 10:41:49 GMT]]></title><description><![CDATA[<p>@ schrieb:</p>
<blockquote>
<p>Ist es <strong>garantiert</strong>, dass das Temporary für den return-Wert *vor* dem Destruktor des Scope-Guards ausgeführt wird?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Falls es garantiert ist, bitte einen entsprechenden <strong>Verweis auf den Standard</strong>.</p>
</blockquote>
<p>Darfst du dir selber suchen.<br />
Oder du begnügst dich mit folgender Überlegung:<br />
* Der Returnwert muss kopiert werden bevor das Objekt welches kopiert wird zerstört wird.<br />
* Man kann lokale Variablen zurückgeben.</p>
<p>=&gt; Der Returnwert muss kopiert werden bevor lokale Variablen zerstört werden.</p>
<p>Easy.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2350019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350019</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 03 Sep 2013 10:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zusammenspiel von RAII-Mutex und return &#x2F; Standard-Advokat gesucht on Tue, 03 Sep 2013 15:49:20 GMT]]></title><description><![CDATA[<p>Youka schrieb:</p>
<blockquote>
<blockquote>
<p>...the expression is evaluated just before the function returns to its caller.</p>
</blockquote>
<p>Diese Beschreibung ist somit doch ziemlich genau.</p>
</blockquote>
<p>Ich finde die Formulierung insofern schwammig, dass man es auch so lesen könnte als wenn der Zeitpunkt bis zum letztmöglichen Punkt verzögert wird, potenziell auch nach der Zerstörung von lokalen Objekten.<br />
Da habe ich vermutlich aber zu nah an der Maschine gedacht und das return statement mit dem eigentlichen ret gleichgesetzt. Anders gelesen macht es perfekt Sinn, danke. <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/2350079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2350079</guid><dc:creator><![CDATA[@]]></dc:creator><pubDate>Tue, 03 Sep 2013 15:49:20 GMT</pubDate></item></channel></rss>