移动构造函数注释未打印

时间:2018-06-29 19:33:32

标签: c++11 move-constructor

我有一个类似下面的小程序:

    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(boovector && b)” ,则会出现编译器错误

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

我想了解未调用move构造函数的逻辑。

1 个答案:

答案 0 :(得分:-1)

在我的MSVC 2017 Community Edition上,产生的输出是:

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

所以它按预期工作。