Advertisement
DarkoreXOR

Untitled

Jun 8th, 2020
747
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class MyCls
  4. {
  5. public:
  6.     MyCls()
  7.     {
  8.         std::cout << "MyCls(): " << this << std::endl;
  9.     }
  10.  
  11.     MyCls(const MyCls& v)
  12.     {
  13.         std::cout << "MyCls(MyCls&& v): " << this << ", other: " << &v  << std::endl;
  14.     }
  15.  
  16.     MyCls(MyCls&& v) noexcept
  17.     {
  18.         std::cout << "MyCls(MyCls&& v): " << this << ", other: " << (&v) << std::endl;
  19.     }
  20.  
  21.     virtual  ~MyCls()
  22.     {
  23.         std::cout << "~MyCls(): " << this  << std::endl;
  24.     }
  25. };
  26.  
  27. // Функция возвращает лямбду
  28. auto makeWalrus(const MyCls& t)
  29. {
  30.     // Захват переменной name по ссылке и возврат лямбды
  31.     return [=]() {
  32.         std::cout << "I am a walrus, my name is " << &t << '\n'; // неопределённое поведение
  33.     };
  34. }
  35.  
  36. int main()
  37. {
  38.     // Создаём новый объект с именем Roofus
  39.     // sayName является лямбдой, возвращаемой функцией makeWalrus()
  40.     auto sayName{ makeWalrus(MyCls()) };
  41.  
  42.     // Вызов лямбды, которую возвращает функция makeWalrus()
  43.     sayName();
  44.  
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement