Об умных указателях
Мой вопрос касается конструктора копирования и оператора = overload в этом коде. Я понимаю это, но не совсем. Может кто-нибудь объяснить мне эти два выражения? Заранее спасибо!!!
#include <iostream> using namespace std; template <class T> class Auto_ptr2{ private: T *m_ptr; public: Auto_ptr2(T *ptr=nullptr) { } ~Auto_ptr2(){ delete m_ptr; } Auto_ptr2(Auto_ptr2 &p) { m_ptr=p.m_ptr; p.m_ptr=nullptr; } Auto_ptr2 operator=(Auto_ptr2 &p) { if(&p==this){return *this;} else{ delete m_ptr; m_ptr=p.m_ptr; return *this; } } T &operator*(){return *m_ptr;} T *operator->(){return m_ptr;} bool isNull()const{return m_ptr==nullptr;} }; class Resource{ public: Resource(){cout<<"Resource is acquired"<<endl;} ~Resource(){cout<<"Resource is destroyed"<<endl;} }; int main() { Auto_ptr2<Resource> res1(new Resource); Auto_ptr2<Resource> res2; cout<<"res1 is: "<<(res1.isNull()?"null":"not null")<<endl; cout<<"res2 is: "<<(res2.isNull()?"null": "not null")<<endl; res2=res1; cout<<"res1 is: "<<(res1.isNull()?"null":"not null")<<endl; cout<<"res2 is: "<<(res2.isNull()?"null": "not null")<<endl; }
Что я уже пробовал:
Я пытался понять это, я понимаю это сейчас, но не совсем :)
Philippe Mori
Стандартный класс auto_ptr имеет известные проблемы... Итак, ваш код основан на его реализации. Если у вас есть современный компилятор C++, лучше использовать вместо него unique_ptr или shared_ptr.