In the following code:
struct aa
{
int a;
aa( int x):a(x){ cout<<"const is called"<<endl;}
~aa(){cout <<"dest is called"<<endl;}
aa( aa&& obj)
{
a = obj.a;
cout<<"move const is called"<<endl;
}
};
int main ()
{
vector<aa> v1;
v1.push_back(aa(9));
v1.emplace_back(9);
}
- when only
push_back
is used, result are expected ( Move constructor , constructor and destructor are called .)
Results:
const is called
move const is called
dest is called
dest is called
- When only
emplace_back
is used , result are expected ( No Move constructor is called , only constructor and destructor are called .)
Results:
const is called
dest is called
- but when I combined
push_back
withemplace_back
, why move constructor is called foremplace_back
while it was not called when used separately) ?
Results:
const is called
move const is called
dest is called
const is called
move const is called
dest is called
dest is called
dest is called