Переместить комментарий конструктора, который не печатается - PullRequest
0 голосов
/ 29 июня 2018

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

    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 Ответ

0 голосов
/ 29 июня 2018

В моем случае на 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

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

...