samedi 18 août 2018

why push_back and emplace_back when combined together, have different behaviour

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);
}

  1. 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

  1. 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

  1. but When I combined push_back with emplace_back, why move constructor is called for emplace_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

Aucun commentaire:

Enregistrer un commentaire