C++这份代码没有触发移动构造函数,存疑,看看以后能不能知晓

如下代码的输出,在vs2017和网上编译器都是一样的,留存看看以后能不能解惑

#include <iostream>
#include <memory>
#include <string>
using namespace std;
int g_constructNum = 0;
int g_copyConstructNum = 0;
int g_moveConstructNum = 0;
int g_deleteNum = 0;

class MyTestString
{
private:
    std::string m_data;
    int m_value;
    void test() {}
public:
    MyTestString(std::string data,int value) :m_data(data),m_value(value)
    {
        std::cout << "construct: " << ++g_constructNum << std::endl;
    }
    MyTestString(const MyTestString& myTestString)
    {
        m_data = myTestString.m_data;
        m_value = myTestString.m_value;
        std::cout << "copy construct: " << ++g_copyConstructNum << std::endl;
    }
    MyTestString(MyTestString &&myTestString)
    {
        std::swap(m_data, myTestString.m_data);
        std::swap(m_value, myTestString.m_value);
        std::cout << "move copy construct: " << ++g_moveConstructNum << std::endl;
    }
    ~MyTestString()
    {
        std::cout << "destruct: " << ++g_deleteNum << std::endl;
    }
};

MyTestString getTempString()
{
    MyTestString temp("tangmiao", 1);
    return temp;
}

int main()
{
    //MyTestString temp = getTempString();
    MyTestString temp(MyTestString("tangmiao",1));
    return 0;
}

按道理应该是输出:
construct: 1
move copy construct: 1
destruct: 1
destruct: 2

而输出的是:
图片说明

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:30
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
07-14 12:29
门头沟学院 Java
后端岗,实习三周感觉有点想跑路了,担心秋招被拉黑,有没有佬是字节HR知道情况的
从零开始的转码生活:你实习三周都想跑路,将来拿到offer真的愿意在这干十几二十年吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务