看来关于C++ 0x的rvalues的主要建议是添加移动构造函数并将运算符移动到类中,直到编译器默认实现它们.
但是如果使用VC10,等待是一种失败的策略,因为自动生成可能不会在VC10 SP1之前,或者在最坏的情况下,VC11.可能,等待这个将是多年来衡量.
这就是我的问题.编写所有这些重复的代码并不好玩.这看起来很不愉快.但对于那些认为很慢的课程来说,这是一个很受欢迎的负担.对于数百个(如果不是数千个)较小的类而言,情况并非如此.
::叹气:: C++ 0x应该让我写更少的代码,而不是更多!
然后我有了一个想法.很多人都愿意共享,我猜.
为什么不按价值传递一切?不会std :: move + copy elision使这几乎达到最佳状态吗?
OurClass::OurClass(const SomeClass& obj) : obj(obj) {}
SomeClass o;
OurClass(o); // single copy
OurClass(std::move(o)); // single copy
OurClass(SomeClass()); // single copy
Run Code Online (Sandbox Code Playgroud)
缺点: rvalues的浪费副本.
OurClass::OurClass(const SomeClass& obj) : obj(obj) {}
OurClass::OurClass(SomeClass&& obj) : obj(std::move(obj)) {}
SomeClass o;
OurClass(o); // single copy
OurClass(std::move(o)); // zero copies, one move
OurClass(SomeClass()); // zero copies, one move
Run Code Online (Sandbox Code Playgroud)
优点:大概是最快的.
缺点:很多代码!
我意识到这对于需要不到2秒钟实施的事情来说是一个荒谬的问题.但我依稀记得读过新标准引入的那个.
我grep'ed VC10的标题,并没有得到什么.你能帮我吗?这让我烦恼!:)
编辑:
第二个想法,我记得的新仿函数可能是无关的std::default_deleter.