Переместить комментарий конструктора, который не печатается

У меня есть небольшая программа, как показано ниже:

    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'

Я хочу понять логику, по которой конструктор перемещения не вызывается.

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

Так что все работает как положено.

Другие вопросы по тегам