草庐IT

move-constructor

全部标签

c++ - 与 move 构造函数混淆 : unable to call move constructor

我一直难以理解C++中的move构造函数。我用默认构造函数、复制构造函数、move构造函数和析构函数制作了一个简单的类。此外,我定义了一个具有两个重载的函数,一个接受对该类的引用,一个接受对该类的右值引用。我的测试代码如下。#includeclassc{public:c(){std::cout我得到的输出不是我所期望的。以下是我从此代码获得的输出。defaultconstructorcopyconstructorpassedbyreferencedefaultconstructorpassedbyrvaluereferencedestructor除了第3行,我能理解所有行的输出。在第3

c++ 复制构造函数与 std::vector 的移动构造函数

我有一个包含std::vector的类structMystruct{Mystruct(conststd::vector&w):v(w){std::cout&&w):v(w){std::coutv;};然后我创建像这样的对象intmain(){autox=std::vector{1,2,3};MystructM1(x);MystructM2(std::vector{3,2,1});return0;}M1是使用复制构造函数构造的,M2使用“移动”构造函数构造的,但是在gdb中运行时,两个赋值都为v和w保留不同的地址,同样的情况发生如果我在第二个构造函数的初始化列表中使用v(std::mov

c++ - std::move 的类型是什么?

此代码按预期工作(在线here)。最后v是空的w不是空的,因为它窃取了v的内容.vectorv;v.push_back(1);coutw(vp);cout但是如果我替换autovp=move(v)与vector&&vp=move(v);然后它就不动了。相反,它复制并且两个vector最后都是非空的。如图here.说明:更具体地说,vp的自动派生类型是什么??如果不是vector&&,那还能是什么呢?尽管这两个示例如此相似,但为什么会给出不同的结果?Extra:这个我也试过了,还是复制而不是movestd::remove_reference>::type&&vp=move(v);

c++ - 如何在不使用异常的情况下检查 constructor() 中的失败?

我正在处理的所有类都有Create()/Destroy()(或Initialize()/Finalized())方法。Create()方法的返回值是bool,如下所示。boolMyClass::Create(...);所以我可以通过返回值来检查实例的初始化是否成功。如果没有Create()/Destroy(),我可以在constructor()和destroy()中做同样的工作,但我无法解决以下问题。谁能帮帮我?提前致谢。我不能使用异常(exception),因为我的公司不喜欢它。classFoo{private:AnotherClassa;public:Foo(){if(a.Init

c++ - 什么时候添加 move 构造函数和 move 赋值运算符才会真正开始有所作为?

考虑到当今编译器在返回值优化(RVO和NRVO)方面的高质量,我想知道开始添加move构造函数和move赋值运算符实际上对什么类复杂性有意义。例如,对于这个really_trivial类,我只是假设move语义不能提供比RVO和NRVO在复制它的实例时已经做的更多的东西:classreally_trivial{intfirst_;intsecond_;public:really_trivial();...};在这个semi_complex类中,我会毫不犹豫地添加move构造函数和move赋值运算符:classsemi_complex{std::vectorstrings_;public

c++ - 为什么这里调用的是 Copy Constructor 而不是普通的 Constructor 和重载的赋值运算符?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:IsthereadifferenceinC++betweencopyinitializationanddirectinitialization?CopyconstructorsandAssignmentOperators我有一个C类,我在其中重载了Normal、复制构造函数和赋值运算符以打印被调用内容的踪迹。我写了以下代码来测试什么时候被调用?Cc1;-->NormalConstuctor..//understoodFineCc2;c2=c1;-->Normalconstructor+assignmentop

c++ - 按值传递和 move ,或两种方法

这个问题在这里已经有了答案:WhyisvaluetakingsettermemberfunctionsnotrecommendedinHerbSutter'sCppCon2014talk(BacktoBasics:ModernC++Style)?(4个答案)关闭7年前。假设我有以下类,它有一个方法set_value。哪种实现方式更好?classS{public://aset_valuemethodprivate:Some_typevalue;};按值传递,然后movevoidS::set_value(Some_typevalue){this->value=std::move(value

C#如何在不使用file.move的情况下重命名文件

我有一个连接到服务器的C#应用​​程序,获取DataGrid,操纵每一行,然后根据每个更新的行,新行被上传到服务器,每行每行都会在HDD上重命名一个文件。该应用程序的工作状态完全不错,但我与Profiler进行了分析,并意识到这条代码:File.Move(symbolsOldPath,symbolsPath);我的应用程序需要花费80%的时间来完成其任务。如果有一种不同的表现方式,我经历了所有问题和其他问题,但我并没有成功。我发现唯一的另一种方式是实现VB使用重命名方法,但是正如它称为文件一样。移动方法没有改进。你们是否知道另一种表现更好的方式?这是更改数据的类的代码。publicDataTa

无法移动选定的资源组合。 MOVE请求中缺少资源:“ XXX”。

我有一个看起来像这样的资源组:应用程序服务计划UispWestEuServerFarm仅包含单个应用程序:evisserver.当我尝试将Evisserver与UISPWESTEUSERVERFARM一起移动到另一个资源组时,我会发现一个错误:无法移动选定的资源组合。资源:'/blabla/resourcegroups/vyvojari.sk/providers/microsoft.web/sites/vyvojari-sk-dev'来自移动请求中缺少。请选择源订阅和资源组中的所有资源,以便它们可以一起移动。(代码:BadRequest,目标:Microsoft.web/serverfarms

c++ - 继承层次结构 : Constructor & Destructor execution sequence

在这里http://www.parashift.com/c++-faq-lite/multiple-inheritance.html[25.14]节说Theveryfirstconstructorstobeexecutedarethevirtualbaseclassesanywhereinthehierarchy.我尝试使用以下程序验证它:A(purevirtual)|B|C(virtual)/\(virtual)ED\/F|G(purevirtual)|H每个类都有一个c'tor和virtuald'tor。输出如下:ABCEDFGH~H~G~F~D~E~C~B~APressanyke