Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <algorithm>
  2. struct Expression;
  3. struct Number;
  4. struct BinaryOperation;
  5.  
  6. using namespace std;
  7. struct SharedPtr
  8. {
  9.     // реализуйте следующие методы
  10.    
  11.    
  12.     // void reset(Expression *ptr = 0)
  13.     // Expression& operator*() const
  14.     // Expression* operator->() const
  15.     explicit SharedPtr(Expression *ptr = 0)
  16.     {
  17.         count = new int;
  18.         *count =1;
  19.         ptr_=ptr;
  20.     }
  21.     ~SharedPtr()
  22.     {
  23.         if(*count == 0)
  24.         {
  25.             *count--;
  26.         }
  27.         else
  28.         {  
  29.             delete count;
  30.             delete ptr_;
  31.         }
  32.        
  33.     }
  34.     SharedPtr(const SharedPtr &a)
  35.     {
  36.         ptr_=a.ptr_;
  37.         count=a.count;
  38.        if(ptr_!=NULL) *count++;
  39.      
  40.        
  41.     }
  42.     SharedPtr& operator=( SharedPtr &a)
  43.     {
  44.         if(ptr_!=NULL) *count--;
  45.         if(a.ptr_!=NULL) *a.count++;
  46.         if(a.ptr_!=this->ptr_)
  47.         {
  48.             swap(a.ptr_,this->ptr_);
  49.             swap(a.count,this->count);
  50.         }
  51.         return *this;
  52.     }
  53.     Expression * get() const
  54.    {
  55.        return ptr_;
  56.    }
  57.      Expression& operator*() const
  58.    {
  59.         return (*ptr_);
  60.    }
  61.     Expression* operator->() const{
  62.     return this->ptr_;
  63. }
  64.       void reset(Expression *ptr = 0)
  65.       {
  66.           Expression* buf=ptr_;
  67.         if(*count==0) delete ptr_;
  68.         ptr_=buf;
  69.       }
  70.     Expression* ptr_;
  71.     int * count;
  72. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement