Skip to content

Instantly share code, notes, and snippets.

@v14dislav
Created April 11, 2019 14:21
Show Gist options
  • Save v14dislav/cc6aa5ddcd86599db9616652cf1f4b57 to your computer and use it in GitHub Desktop.
Save v14dislav/cc6aa5ddcd86599db9616652cf1f4b57 to your computer and use it in GitHub Desktop.
Smart C++ pointers: shared ptr
struct Expression;
struct Number;
struct BinaryOperation;
struct SharedPtr
{
explicit SharedPtr(Expression *ptr = 0){
ptr_=ptr; count= new int; *count=1;
}
~SharedPtr(){
*count-=1;
if( *count==0) {
delete count;
delete ptr_;
ptr_=0;
}
}
SharedPtr(const SharedPtr & obj) {
ptr_=obj.ptr_;
count= obj.count;
*count+=1;
}
SharedPtr& operator=(const SharedPtr & obj){
if(this!=(&obj) ){ *count-=1;
if(*count==0) {
delete ptr_;
delete count;
}
ptr_= obj.ptr_;
count= obj.count;
*count+=1;
}
return *this;
}
Expression* get() const{
return ptr_;
}
void reset(Expression *ptr = 0){
*count-=1;
if(*count==0) {
delete ptr_;
delete count;
}
ptr_=ptr;
count=new int;
*count=1;
}
Expression& operator*() const {
return *ptr_;
}
Expression* operator->() const {
return ptr_;
}
private:
int* count;
Expression* ptr_;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment