Advertisement
cepxuozab

RAII-UniquePtr

May 22nd, 2024
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. struct Spy {
  2.         explicit Spy(bool& is_deleted, int& copy_count)
  3.                 : is_deleted_(is_deleted), copy_count_(copy_count) {}
  4.  
  5.         Spy(const Spy& rhs)
  6.                 : is_deleted_(rhs.is_deleted_), copy_count_(rhs.copy_count_) {
  7.             ++copy_count_;
  8.         }
  9.         ~Spy() {
  10.             is_deleted_ = true;
  11.         }
  12.  
  13.         bool& is_deleted_;
  14.         int& copy_count_;
  15.     };
  16.  
  17. void MoveConstructorOrGet() {
  18.         {
  19.             UniquePtr<Spy> uptr(nullptr);
  20.             UniquePtr<Spy> uptr2(std::move(uptr));
  21.  
  22.             ASSERT_EQUAL(uptr.Get(), nullptr);
  23.             ASSERT_EQUAL(uptr2.Get(), nullptr);
  24.         } {
  25.             int copy_count_ = 0;
  26.             bool is_deleted = false;
  27.             auto *ptr = new Spy(is_deleted, copy_count_);
  28.             UniquePtr<Spy> uptr(ptr);
  29.             UniquePtr<Spy> uptr2(std::move(uptr));
  30.  
  31.             ASSERT_EQUAL(uptr.Get(), nullptr);
  32.             ASSERT_EQUAL(uptr2.Get(), ptr)
  33.             ASSERT_EQUAL(copy_count_, 0)
  34.         }
  35.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement