fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4.  
  5. struct Thing {
  6. Thing(const char* const name_) : m_name(name_) { std::cout << "created " << m_name << '\n'; }
  7. Thing(const Thing& rhs_) : m_name(rhs_.m_name) { std::cout << "copied " << m_name << '\n'; }
  8. Thing(Thing&& rhs_) : m_name(rhs_.m_name) { std::cout << "moved " << m_name << '\n'; rhs_.m_name = nullptr; }
  9. Thing& operator = (const Thing& rhs_) { m_name = rhs_.m_name; std::cout << "=& " << m_name; return *this; }
  10. Thing& operator = (Thing&& rhs_) { m_name = rhs_.m_name; std::cout << "=&& " << m_name; rhs_.m_name = nullptr; return *this; }
  11. ~Thing() { std::cout << "dtor(" << (m_name ? m_name : "null") << ")\n"; }
  12.  
  13. const char* m_name;
  14. };
  15. int main() {
  16. std::map<int64_t, std::vector<Thing>> myMap { { 1, { "Hello", "World" } }, { 2, { "Eat", "Pizza" } } };
  17. std::cout << "for\n";
  18. for (auto kv : myMap) {
  19. std::cout << "for " << kv.first << " -> " << kv.second[0].m_name << "\n";
  20. }
  21. std::cout << "endfor\n";
  22. }
Success #stdin #stdout 0s 3236KB
stdin
Standard input is empty
stdout
created Hello
created World
copied Hello
copied World
copied Hello
copied World
created Eat
created Pizza
copied Eat
copied Pizza
copied Eat
copied Pizza
copied Hello
copied World
copied Eat
copied Pizza
dtor(Eat)
dtor(Pizza)
dtor(Hello)
dtor(World)
dtor(Eat)
dtor(Pizza)
dtor(Pizza)
dtor(Eat)
dtor(Hello)
dtor(World)
dtor(World)
dtor(Hello)
for
copied Hello
copied World
for 1 -> Hello
dtor(Hello)
dtor(World)
copied Eat
copied Pizza
for 2 -> Eat
dtor(Eat)
dtor(Pizza)
endfor
dtor(Eat)
dtor(Pizza)
dtor(Hello)
dtor(World)