Guest User

emplace_back

a guest
May 14th, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. class Noisy
  5. {
  6. public:
  7.     Noisy() : i_{0}
  8.     {
  9.         std::cout << "Noisy default ctor\n";
  10.         count++;
  11.     }
  12.     explicit Noisy (int i) : i_{i}
  13.     {
  14.         std::cout << "Noisy{" << i << "} ctor\n";
  15.         count++;
  16.     }
  17.     Noisy (Noisy const &o) : i_{o.i_}
  18.     {
  19.         std::cout << "Noisy copy ctor " << i_ << "\n";
  20.         count++;
  21.     }
  22.     Noisy& operator= (Noisy const &o)
  23.     {
  24.         if (this == &o)
  25.             std::cout << "Noisy self-(copy assignment) " << i_ << "\n";
  26.         else
  27.         {
  28.             i_ = o.i_;
  29.             std::cout << "Noisy copy assignment " << i_ << "\n";
  30.         }
  31.         return *this;
  32.     }
  33.     Noisy (Noisy&& o) : i_{o.i_}
  34.     {
  35.         o.i_ = -1;
  36.         std::cout << "Noisy move ctor" << i_ << "\n";
  37.     }
  38.     Noisy& operator= (Noisy&& o)
  39.     {
  40.         if (this == &o)
  41.             std::cout << "Noisy self-(move assignment) " << i_ << "\n";
  42.         else
  43.         {
  44.             i_ = o.i_;
  45.             o.i_ = -1;
  46.             std::cout << "Noisy move assignment " << i_ << "\n";
  47.         }
  48.         return *this;
  49.     }
  50.     ~Noisy()
  51.     {
  52.         std::cout << "Noisy dtor " << i_ << "\n";
  53.         count--;
  54.     }
  55.     static void report()
  56.     {
  57.         std::cout << count << " instance(s).\n";
  58.     }
  59. private:
  60.     int i_;
  61.     static int count;
  62. };
  63.  
  64. int Noisy::count = 0;
  65.  
  66.  
  67. int main()
  68. {
  69.     std::vector<Noisy> vec;
  70.     vec.reserve (1000);
  71.     Noisy n1(1);
  72.     vec.emplace_back(n1);
  73.     Noisy n2(2);
  74.     vec.push_back(n2);
  75.  
  76.     vec.emplace_back(Noisy(3));
  77.     vec.push_back (Noisy (4));
  78.     vec.emplace_back (5);
  79. }
Add Comment
Please, Sign In to add comment