Переместить комментарий конструктора, который не печатается
У меня есть небольшая программа, как показано ниже:
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
Так что все работает как положено.