首先我粗浅的认为同时存在没有问题,因为一个是创建一个变量副本一个转移一个生存周期将到的变量所申请的资源环境g++.exe(Rev2,BuiltbyMSYS2project)9.2.0g++.exe(x86_64-posix-seh-rev0,BuiltbyMinGW-W64project)8.1.0实验sf抽风,源码见http://code.bulix.org/k07gcm-891664A( const A& c )&A( A&& c )同时存在的输出this:0x66f880@A()0申请内存:0x732760this:0x737d50@A(A&&c)0移动内存:0x732760this:0x66f880@~A()0被移动内存:0this:0x66f880@A()1申请内存:0x737d70this:0x737dc0@A(A&&c)1移动内存:0x737d70this:0x737db0@A(constA&c)99//???this:0x737d500申请内存:0x737de0this:0x737d50@~A()0释放内存:0x732760this:0x66f880@~A()1被移动内存:0over0x737db0:99//???0x737dc0:1this:0x737db0@~A()99释放内存:0x737de0this:0x737dc0@~A()1释放内存:0x737d70可见调用了拷贝构造函数,这是不是内部没有使用std::move导致调用拷贝构造函数?(瞎猜)只有A( A&& c )时的输出this:0x66f880@A()0申请内存:0x1f2760this:0x1f7d50@A(A&&c)0移动内存:0x1f2760this:0x66f880@~A()0被移动内存:0this:0x66f880@A()1申请内存:0x1f7d70this:0x1f7dc0@A(A&&c)1移动内存:0x1f7d70this:0x1f7db0@A(A&&c)0移动内存:0x1f2760this:0x1f7d50@~A()0被移动内存:0this:0x66f880@~A()1被移动内存:0over0x1f7db0:00x1f7dc0:1this:0x1f7db0@~A()0释放内存:0x1f2760this:0x1f7dc0@~A()1释放内存:0x1f7d70问题2classAa(2);vect.push_back(std::move(a));输出this:0x66f880@A()0申请内存:0x1f2760this:0x1f7d50@A(A&&c)0移动内存:0x1f2760this:0x66f880@~A()0被移动内存:0这个应该是push_back的源码push_back(value_type&& __x){ emplace_back(std::move(__x)); }为什么只调一次移动构造函数,被优化了?+------------------------------+|在这里创建变量|+------------------------------+vect.push_back(std::move(a));+------------------------------+|调用移动构造函数|+------------------------------+emplace_back(std::move(__x));//
添加回答
举报
0/150
提交
取消