Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- struct Expression;
- struct Number;
- struct BinaryOperation;
- using namespace std;
- struct SharedPtr
- {
- // реализуйте следующие методы
- // void reset(Expression *ptr = 0)
- // Expression& operator*() const
- // Expression* operator->() const
- explicit SharedPtr(Expression *ptr = 0)
- {
- count = new int;
- *count =1;
- ptr_=ptr;
- }
- ~SharedPtr()
- {
- if(*count == 0)
- {
- *count--;
- }
- else
- {
- delete count;
- delete ptr_;
- }
- }
- SharedPtr(const SharedPtr &a)
- {
- ptr_=a.ptr_;
- count=a.count;
- if(ptr_!=NULL) *count++;
- }
- SharedPtr& operator=( SharedPtr &a)
- {
- if(ptr_!=NULL) *count--;
- if(a.ptr_!=NULL) *a.count++;
- if(a.ptr_!=this->ptr_)
- {
- swap(a.ptr_,this->ptr_);
- swap(a.count,this->count);
- }
- return *this;
- }
- Expression * get() const
- {
- return ptr_;
- }
- Expression& operator*() const
- {
- return (*ptr_);
- }
- Expression* operator->() const{
- return this->ptr_;
- }
- void reset(Expression *ptr = 0)
- {
- Expression* buf=ptr_;
- if(*count==0) delete ptr_;
- ptr_=buf;
- }
- Expression* ptr_;
- int * count;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement