c – 为工厂类正确使用std move
发布时间:2020-12-16 09:56:33 所属栏目:百科 来源:网络整理
导读:我想创建一个像下面这样的工厂类,但我不相信这是使用std :: move的正确方法.我不想使用太多的shared_ptrs,因为另一个shared_ptr中的shared_ptr真的很难看,有时令人困惑…… 选项1: class Foo{ public: Foo(Foo f){...}}class FooFactory{ public: static Fo
我想创建一个像下面这样的工厂类,但我不相信这是使用std :: move的正确方法.我不想使用太多的shared_ptrs,因为另一个shared_ptr中的shared_ptr真的很难看,有时令人困惑……
选项1: class Foo { public: Foo(Foo&& f){...} } class FooFactory { public: static Foo&& createFoo(...) { Foo temp(...); return std::move(temp); } } main() { Foo f=FooFactory::createFoo(...); } 选项2: class FooFactory { public: static Foo createFoo(...) { Foo temp(...); return temp; }// rely on compiler for optimization } main() { Foo f=std::move(FooFactory::createFoo(...)); } 解决方法
执行此操作的正确方法是选项3(也与之前相同):
class FooFactory { public: static Foo createFoo(...) { Foo temp(...); return temp; } }; int main() { Foo f=FooFactory::createFoo(...); }
您的选项1不仅效率低,而且不正确,因为它返回对temp的悬空引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |