Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template<class T>
  4. class Auto_ptr1
  5. {
  6.     T* m_ptr;
  7. public:
  8.     // Получаем указатель для "владения" через конструктор
  9.     Auto_ptr1(T* ptr=nullptr)
  10.         :m_ptr(ptr)
  11.     {
  12.     }
  13.    
  14.     // Деструктор позаботится об удалении указателя
  15.     ~Auto_ptr1()
  16.     {
  17.         delete m_ptr;
  18.     }
  19.  
  20.     // Выполняем перегрузку операторов разыменования и ->, чтобы иметь возможность использовать Auto_ptr1 как m_ptr
  21.     T& operator*() const { return *m_ptr; }
  22.     T* operator->() const { return m_ptr; }
  23. };
  24.  
  25. // Класс для проверки работоспособности кода выше
  26. class Item
  27. {
  28. public:
  29.     Item() { std::cout << "Item acquired\n"; }
  30.     ~Item() { std::cout << "Item destroyed\n"; }
  31. };
  32.  
  33. int main()
  34. {
  35.     Auto_ptr1<Item> item(new Item); // динамическое выделение памяти
  36.  
  37.         // ... но никакого явного delete здесь не нужно
  38.  
  39.     // Также обратите внимание на то, что Item-у в угловых скобках не требуется символ *, поскольку это предоставляется шаблоном класса
  40.  
  41.     return 0;
  42. } // item выходит из области видимости здесь, и уничтожает выделенный Item вместо нас
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement