[Assorted-commits] SF.net SVN: assorted:[1191] sandbox/trunk/src/cc
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-02-18 00:29:34
|
Revision: 1191 http://assorted.svn.sourceforge.net/assorted/?rev=1191&view=rev Author: yangzhang Date: 2009-02-18 00:29:29 +0000 (Wed, 18 Feb 2009) Log Message: ----------- added clamp memory safety demo Added Paths: ----------- sandbox/trunk/src/cc/clamp.cc.clamp sandbox/trunk/src/cc/clamp.mk Added: sandbox/trunk/src/cc/clamp.cc.clamp =================================================================== --- sandbox/trunk/src/cc/clamp.cc.clamp (rev 0) +++ sandbox/trunk/src/cc/clamp.cc.clamp 2009-02-18 00:29:29 UTC (rev 1191) @@ -0,0 +1,27 @@ +// Examine memory safety of using context-less lambdas. +// Turns out that the lambdas can be copy constructed +// and that function0<> stores a copy of the functor. +// Everything works as expected. +#include <iostream> +#include <boost/function.hpp> +using namespace std; +using namespace boost; +#include "lambda_impl.clamp_h" +struct save { + save(function<void()> f) : f(f) {} + void call() { f(); } + function<void()> f; +}; +int main() { + int x = 0; + save s(lambda() { cout << "0. " << __ctx(x) << endl; }); + ++x; + save t(lambda() { cout << "1. " << __ctx(x) << endl; }); + s.call(); + t.call(); + + ++x; + function<void()> f = lambda() { cout << "2. " << __ctx(x) << endl; }; + f(); + return 0; +} Added: sandbox/trunk/src/cc/clamp.mk =================================================================== --- sandbox/trunk/src/cc/clamp.mk (rev 0) +++ sandbox/trunk/src/cc/clamp.mk 2009-02-18 00:29:29 UTC (rev 1191) @@ -0,0 +1,4 @@ +all: clamp + +clamp.cc: clamp.cc.clamp + clamp < $< | sed '1d' > $@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |