Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <chrono>
- class Element
- {
- int val;
- std::weak_ptr<Element> pair;
- public:
- Element(int valP) : val{ valP } { std::cout << "Element constructed for " << this << '\n'; };
- Element() : Element{ 0 } {};
- ~Element(){ std::cout << "Element destructed for " << this << '\n'; };
- int getVal() const { return val; };
- friend bool addPair(std::shared_ptr<Element>& lhs, std::shared_ptr<Element>& rhs)
- {
- if (!lhs or !rhs)
- {
- return false;
- };
- lhs->pair = rhs;
- rhs->pair = lhs;
- std::cout << lhs->getVal() << " paired with " << rhs->getVal() << '\n';
- return true;
- }
- const std::shared_ptr<Element> getPair()const { return pair.lock(); };
- };
- int main()
- {
- srand(time(nullptr));
- std::shared_ptr<Element> One{ std::make_shared<Element>(1) };//[1 -> 1]
- std::shared_ptr<Element> Two{ std::make_shared<Element>(2) };//[2 -> 1]
- std::cout << "One " << One->getVal() << '\n';
- std::cout << "Two " << Two->getVal() << '\n';
- addPair(One, Two);// [2 -> 1], [1 -> 1]
- std::shared_ptr<Element> onePair{ One->getPair() };//[2 -> 2][2 -> 1][2 -> 2]
- std::shared_ptr<Element> twoPair{ Two->getPair() };//[1 -> 2][1 -> 1][1 -> 2]
- std::cout << (One.get() == twoPair.get()) << '\n';
- std::cout << (Two.get() == onePair.get()) << '\n';
- std::cout << "One's pair is -> " << onePair->getVal() << '\n';
- std::cout << "Two's pair is -> " << twoPair->getVal() << '\n';
- }// Two destructed! [2 -> 0] Element(2) destructed! , One destructed! [1 -> 0] Element(1) destructed!
Advertisement
Add Comment
Please, Sign In to add comment