<?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[Problem mit Lambda Funktionen]]></title><description><![CDATA[<p>Hallo Forum!</p>
<p>Ich habe den folgenden Code geschrieben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;

class foo;
foo *f;

class foo
{ 
  std::function&lt;void()&gt; bar;

public:
  foo(std::function&lt;void()&gt; bar)
    : bar(bar)
  { 
    f = this;
  }

  void run()
  { 
    bar();
  }
};

int &amp;func()
{ 
  int *i = new int;
  std::cout &lt;&lt; i &lt;&lt; std::endl;
  new foo
    ([&amp;]
     { 
       *i = 42;
       std::cout &lt;&lt; i &lt;&lt; std::endl;
     });
  return *i;
}

int main()
{ 
  int &amp;i = func();
  f-&gt;run();
  std::cout &lt;&lt; &amp;i &lt;&lt; std::endl;
  return 0;
}
</code></pre>
<p>In func() alloziere ich dynamisch einen Integer und gebe dessen Adresse aus. Diesen Zeiger capture ich in der Lambda Funktion. Wenn diese nun ausgeführt wird und die Adresse ausgegeben wird, sehe ich eine andere Adresse als vorher. Woran liegt das?</p>
<p>Die Ausgabe lautet zum Beispiel:</p>
<pre><code>% g++ -std=c++11 -Wall -Werror -g test2.cpp &amp;&amp; ./a.out
0x1c56010
0x1c56050
0x1c56010
</code></pre>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321549/problem-mit-lambda-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 03:19:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321549.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Nov 2013 15:03:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Lambda Funktionen on Fri, 15 Nov 2013 15:03:34 GMT]]></title><description><![CDATA[<p>Hallo Forum!</p>
<p>Ich habe den folgenden Code geschrieben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;

class foo;
foo *f;

class foo
{ 
  std::function&lt;void()&gt; bar;

public:
  foo(std::function&lt;void()&gt; bar)
    : bar(bar)
  { 
    f = this;
  }

  void run()
  { 
    bar();
  }
};

int &amp;func()
{ 
  int *i = new int;
  std::cout &lt;&lt; i &lt;&lt; std::endl;
  new foo
    ([&amp;]
     { 
       *i = 42;
       std::cout &lt;&lt; i &lt;&lt; std::endl;
     });
  return *i;
}

int main()
{ 
  int &amp;i = func();
  f-&gt;run();
  std::cout &lt;&lt; &amp;i &lt;&lt; std::endl;
  return 0;
}
</code></pre>
<p>In func() alloziere ich dynamisch einen Integer und gebe dessen Adresse aus. Diesen Zeiger capture ich in der Lambda Funktion. Wenn diese nun ausgeführt wird und die Adresse ausgegeben wird, sehe ich eine andere Adresse als vorher. Woran liegt das?</p>
<p>Die Ausgabe lautet zum Beispiel:</p>
<pre><code>% g++ -std=c++11 -Wall -Werror -g test2.cpp &amp;&amp; ./a.out
0x1c56010
0x1c56050
0x1c56010
</code></pre>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365721</guid><dc:creator><![CDATA[Harald L.]]></dc:creator><pubDate>Fri, 15 Nov 2013 15:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Lambda Funktionen on Fri, 15 Nov 2013 17:09:28 GMT]]></title><description><![CDATA[<p>Du hast im closure-Objekt eine dangling reference auf den Zeiger i. Der Zeiger selbst ist lokal in der Funktion <code>func</code> , und du hast ihn implizit by reference gecaptured.</p>
<p>Ändere den capture-default zu =, dann sollte es klappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365752</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 15 Nov 2013 17:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Lambda Funktionen on Fri, 15 Nov 2013 17:09:57 GMT]]></title><description><![CDATA[<p>Siehe auch hier: <a href="https://ideone.com/qHZA5U" rel="nofollow">https://ideone.com/qHZA5U</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365754</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 15 Nov 2013 17:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Lambda Funktionen on Fri, 15 Nov 2013 20:25:33 GMT]]></title><description><![CDATA[<p>Ach, natürlich! <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="😃"
    /> 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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365782</guid><dc:creator><![CDATA[Harald L.]]></dc:creator><pubDate>Fri, 15 Nov 2013 20:25:33 GMT</pubDate></item></channel></rss>