[Assorted-commits] SF.net SVN: assorted:[1272] sandbox/trunk/src/cc
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-03-09 01:50:35
|
Revision: 1272 http://assorted.svn.sourceforge.net/assorted/?rev=1272&view=rev Author: yangzhang Date: 2009-03-09 01:50:24 +0000 (Mon, 09 Mar 2009) Log Message: ----------- added unique_ptr demos Added Paths: ----------- sandbox/trunk/src/cc/unique_ptr03_test.cc sandbox/trunk/src/cc/unique_ptr_test.cc Added: sandbox/trunk/src/cc/unique_ptr03_test.cc =================================================================== --- sandbox/trunk/src/cc/unique_ptr03_test.cc (rev 0) +++ sandbox/trunk/src/cc/unique_ptr03_test.cc 2009-03-09 01:50:24 UTC (rev 1272) @@ -0,0 +1,66 @@ +#include <boost/unique_ptr.hpp> +#include <vector> +using namespace boost; +using namespace std; +typedef unique_ptr<int> ptr; + +ptr mkptr() { return ptr(new int(0)); } +// Note that we need a move here. +ptr getptr() { ptr p = mkptr(); return boost::move(p); } + +// This just doesn't work. const is a no-go. +#if 0 +void eatptr(const ptr &x) { + vector<ptr> xs; + xs.push_back(boost::move(x)); +} +void putptr(const ptr &x) { eatptr(x); } +#endif + +namespace copies { +void eatptr(ptr x) { + vector<ptr> xs; + xs.push_back(boost::move(x)); +} +void putptr(ptr x) { eatptr(boost::move(x)); } +} + +namespace lvalrefs { +void eatptr(ptr &x) { + vector<ptr> xs; + xs.push_back(boost::move(x)); +} +void putptr(ptr &x) { eatptr(x); } +} + +namespace rvalrefs { +void eatptr(ptr &&x) { + vector<ptr> xs; + xs.push_back(boost::move(x)); +} +void putptr(ptr &&x) { eatptr(x); } +} + +int main() { + ptr q = getptr(); + + { + using namespace copies; + putptr(boost::move(q)); + putptr(getptr()); + } + + { + using namespace lvalrefs; + putptr(q); + // Nope: putptr(getptr()); + } + + { + using namespace rvalrefs; + putptr(q); + putptr(getptr()); + } + + return 0; +} Added: sandbox/trunk/src/cc/unique_ptr_test.cc =================================================================== --- sandbox/trunk/src/cc/unique_ptr_test.cc (rev 0) +++ sandbox/trunk/src/cc/unique_ptr_test.cc 2009-03-09 01:50:24 UTC (rev 1272) @@ -0,0 +1,65 @@ +#include <commons/unique_ptr.h> +#include <vector> +using namespace std; +typedef unique_ptr<int> ptr; + +ptr mkptr() { return ptr(new int(0)); } +// Note that we need a move here. +ptr getptr() { ptr p = mkptr(); return move(p); } + +// This just doesn't work. const is a no-go. +#if 0 +void eatptr(const ptr &x) { + vector<ptr> xs; + xs.push_back(move(x)); +} +void putptr(const ptr &x) { eatptr(x); } +#endif + +namespace copies { + void eatptr(ptr x) { + vector<ptr> xs; + xs.push_back(move(x)); + } + void putptr(ptr x) { eatptr(move(x)); } +} + +namespace lvalrefs { + void eatptr(ptr &x) { + vector<ptr> xs; + xs.push_back(move(x)); + } + void putptr(ptr &x) { eatptr(x); } +} + +namespace rvalrefs { + void eatptr(ptr &&x) { + vector<ptr> xs; + xs.push_back(move(x)); + } + void putptr(ptr &&x) { eatptr(x); } +} + +int main() { + ptr q = getptr(); + + { + using namespace copies; + putptr(move(q)); + putptr(getptr()); + } + + { + using namespace lvalrefs; + putptr(q); + // Nope: putptr(getptr()); + } + + { + using namespace rvalrefs; + putptr(q); + putptr(getptr()); + } + + return 0; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |