Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- using namespace std;
- class BrakObiektu{};
- template <class T>
- class SmartPointer{
- public:
- SmartPointer(T *obj){
- ptr = obj;
- }
- ~SmartPointer(){
- delete ptr;
- }
- SmartPointer& operator=(SmartPointer& o){
- this->ptr = o.ptr;
- o.ptr = 0;
- return *this;
- }
- T* operator->(){
- if ( ptr==0 )
- throw BrakObiektu();
- else return ptr; //zwracam wskaznik
- }
- T& operator*(){
- if ( ptr==0 )
- throw BrakObiektu();
- else return *ptr; //zwracam zawartosc elementu(obiekt)
- }
- private:
- T* ptr;
- };
- class A{
- public:
- void a(){
- cout<<"To ja klasa A\n";
- }
- };
- int main(int argc, char** argv) {
- cout<<"Hello World\n";
- SmartPointer<A> sp(new A);
- try
- {
- sp->a();
- (*sp).a();
- SmartPointer<A> sm(0);
- // sm->a(); wyskoczylby blad bo wskaznik pokazuje na 0
- sm = sp;
- sm->a();
- sp->a(); //wyrzuci blad bo teraz sp wskazuje na 0
- }catch (BrakObiektu& w)
- {
- cout<<"Blad";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement