я не могу получить двигаться семантикой и rvalues, я буду размещать код первым, а затем спросить:Почему уступка движения не называется здесь
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
using namespace std;
class Spred{
public:
Spred(int siz=10):sz{siz},ptrtoint{new int[siz]},c{0} {cout<<"Constructor()"<<endl;}
~Spred(){delete [] ptrtoint;cout<<"Destructor()"<<endl;}
Spred(Spred& src){
ptrtoint=new int[src.sz];
for(int i=0;i<src.c;i++)
ptrtoint[i]=src.ptrtoint[i];
sz=src.sz;c=src.c;
cout<<"Copy constructor"<<endl;
}
Spred& operator=(Spred &src){
delete [] ptrtoint;
sz=src.sz;
c=src.c;
ptrtoint=new int[sz];
for(int i=0;i<c;i++)
ptrtoint[i]=src.ptrtoint[i];
return *this;
cout<<"Copy assignment"<<endl;
}
Spred(Spred&& src){
ptrtoint=new int[src.sz];
for(int i=0;i<src.c;i++)
ptrtoint[i]=src.ptrtoint[i];
sz=src.sz;c=src.c;
delete [] src.ptrtoint;
src.ptrtoint=nullptr;
src.sz=0;src.c=0;
cout<<"Move constructor"<<endl;
}
Spred& operator=(Spred&& src){
delete [] ptrtoint;
ptrtoint=new int[src.sz];
sz=src.sz;c=src.c;
for(int i=0;i<c;i++)
ptrtoint[i]=src.ptrtoint[i];
delete [] src.ptrtoint;
src.ptrtoint=nullptr;
src.sz=0;src.c=0;
return *this;
cout<<"Move assignment"<<endl;
}
void push_back(int a){
ptrtoint[c++]=a;
}
friend ostream& operator<<(ostream& os,Spred &src){
for(int i=0;i<src.c;i++){
os<<src.ptrtoint[i]<<" ";
}
return os;
}
private:
int *ptrtoint;
int sz;int c;
};
Spred createObject(){
return Spred(15);
}
int main()
{
Spred s;
s=createObject();
return 0;
}
У меня есть конкретный вопрос, почему Переместить назначение не называются здесь, когда я вызывать функцию createObject, isn`t объект, возвращаемый функцией Rvalue, если это Rvalue, он должен вызывать назначение перемещения в классе?
@AlexFarber RVO не будет применяться, поскольку это назначение, а не инициализация, не так ли? – Pradhan
try s = std :: move (createObject()); – user1810087
А что называется? Копировать назначение? Ничего? – kraskevich