avr39ripe

PV913weak_ptr

Aug 11th, 2020
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include<iostream>
  2. #include <chrono>
  3.  
  4. class Element
  5. {
  6.     int val;
  7.     std::weak_ptr<Element> pair;
  8. public:
  9.     Element(int valP) : val{ valP } { std::cout << "Element constructed for " << this << '\n'; };
  10.     Element() : Element{ 0 } {};
  11.     ~Element(){ std::cout << "Element destructed for " << this << '\n'; };
  12.     int getVal() const { return val; };
  13.  
  14.     friend bool addPair(std::shared_ptr<Element>& lhs, std::shared_ptr<Element>& rhs)
  15.     {
  16.         if (!lhs or !rhs)
  17.         {
  18.             return false;
  19.         };
  20.  
  21.         lhs->pair = rhs;
  22.         rhs->pair = lhs;
  23.  
  24.         std::cout << lhs->getVal() << " paired with " << rhs->getVal() << '\n';
  25.  
  26.         return true;
  27.     }
  28.     const std::shared_ptr<Element> getPair()const { return pair.lock(); };
  29. };
  30.  
  31.  
  32.  
  33. int main()
  34. {
  35.     srand(time(nullptr));
  36.    
  37.     std::shared_ptr<Element> One{ std::make_shared<Element>(1) };//[1 -> 1]
  38.     std::shared_ptr<Element> Two{ std::make_shared<Element>(2) };//[2 -> 1]
  39.     std::cout << "One " << One->getVal() << '\n';
  40.     std::cout << "Two " << Two->getVal() << '\n';
  41.     addPair(One, Two);// [2 -> 1], [1 -> 1]
  42.  
  43.     std::shared_ptr<Element> onePair{ One->getPair() };//[2 -> 2][2 -> 1][2 -> 2]
  44.     std::shared_ptr<Element> twoPair{ Two->getPair() };//[1 -> 2][1 -> 1][1 -> 2]
  45.  
  46.     std::cout << (One.get() == twoPair.get()) << '\n';
  47.     std::cout << (Two.get() == onePair.get()) << '\n';
  48.  
  49.     std::cout << "One's pair is -> " << onePair->getVal() << '\n';
  50.     std::cout << "Two's pair is -> " << twoPair->getVal() << '\n';
  51.  
  52. }// Two destructed! [2 -> 0] Element(2) destructed! , One destructed! [1 -> 0] Element(1) destructed!
Advertisement
Add Comment
Please, Sign In to add comment