首页 > 解决方案 > 移动构造函数注释未打印

问题描述

我有一个像下面这样的小程序:

    class boovector{
    private: int size;
            char *arr;
    public:
            boovector(){size=1;arr=new char[size];cout<<" boovector default constructor called"<<endl;}
            boovector(boovector &b)
            {
                cout<<"boovector copyconstructor called"<<endl;
                size = b.size;
                arr =  new char[size];
                strncpy(arr,b.arr,size);
            }
            boovector(boovector &&b)
            {
                cout<<"boovector move assignment operator called"<<endl;
                size =b.size;
                arr = b.arr;
                b.arr = nullptr;
            }
            ~boovector()
            {
                delete []arr;
            }

    };
    boovector createboovector()
    {
        boovector v;
        return v;
    }
    void foo(boovector v)
    {

    }
    int main(int argc, char *argv[])
    {
        boovector vet = createboovector();
        foo(vet);
        foo(createboovector());
        return 0;
    }

输出

boovector default constructor called
boovector copyconstructor called
boovector default constructor called

我希望在输出中看到“boovector move assignment operator called”

如果我评论移动构造函数 "boovector(boovector &&b)",我得到编译器错误

  invalid initialization of non-const reference of type 'boovector&' from an 
  rvalue of type 'boovector'

我想了解未调用移动构造函数背后的逻辑。

标签: c++11move-constructor

解决方案


在我的 MSVC 2017 社区版中,产生的输出是:

 boovector default constructor called
boovector move assignment operator called
boovector copyconstructor called
 boovector default constructor called
boovector move assignment operator called

所以它按预期工作。


推荐阅读