Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class BrakObiektu{};
  7.  
  8. template <class T>
  9. class SmartPointer{
  10.     public:
  11.         SmartPointer(T *obj){
  12.             ptr = obj;
  13.         }
  14.         ~SmartPointer(){
  15.             delete ptr;
  16.         }
  17.         SmartPointer& operator=(SmartPointer& o){
  18.             this->ptr = o.ptr;
  19.             o.ptr = 0;
  20.             return *this;
  21.         }
  22.         T* operator->(){
  23.             if ( ptr==0 )
  24.                 throw BrakObiektu();
  25.             else return ptr;  //zwracam wskaznik
  26.         }
  27.        
  28.         T& operator*(){
  29.             if ( ptr==0 )
  30.                 throw BrakObiektu();
  31.             else return *ptr;  //zwracam zawartosc elementu(obiekt)
  32.         }
  33.      
  34.     private:
  35.         T* ptr;
  36. };
  37.  
  38.  
  39. class A{
  40. public:
  41.     void a(){
  42.         cout<<"To ja klasa A\n";
  43.     }
  44. };
  45.  
  46.  
  47.  
  48. int main(int argc, char** argv) {
  49.     cout<<"Hello World\n";
  50.    
  51.     SmartPointer<A> sp(new A);
  52.    
  53.     try
  54.     {
  55.         sp->a();
  56.        
  57.     (*sp).a();
  58.        
  59.        
  60.         SmartPointer<A> sm(0);
  61.        
  62.                // sm->a();  wyskoczylby blad bo wskaznik pokazuje na 0
  63.         sm = sp;
  64.        
  65.         sm->a();
  66.        
  67.         sp->a();  //wyrzuci blad bo teraz sp wskazuje na 0
  68.        
  69.        
  70.     }catch (BrakObiektu& w)
  71.     {
  72.         cout<<"Blad";
  73.     }
  74.    
  75.    
  76.    
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement