Announcement

Collapse
No announcement yet.

Create a smart pointer

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Create a smart pointer

    Creare una classe unique_pointer per eliminare automaticamente i dati allocati dinamicamente senza chiamare la funzione delete.
    Appena una istanza di unique_pointer viene rimossa dallo stack, il suo decostruttore eliminerà automaticamente anche i dati allocati nell'heap a cui punta.

    L'overload degli operatori = e () permottono di effettuare assegnazioni dirette e perdere l'autorizzazione ad eliminare i dati se c'è un altro puntatore che punta agli stessi dati.

    PHP Code:
    #include <iostream>
    #include <iomanip>
    #include <string>

    using namespace std;


    template <typename TIPO >class unique_pointer {
    public:

        
    //////////////////////// constructor, initialize the pointer and ownership
        
    unique_pointer()
            :
    pointer(NULL),
            
    ownership(0)
        {}
        
        
    /////////////////////// the main utility of this class - delete the pointed data when it's removed from the stack
        
    ~unique_pointer(){
            if ( (
    pointer != NULL) && (ownership==1))
                
    delete pointer;
        }

        
    /////////////////// operator = defined to permit direct assignment
        
    void operator= (TIPO in_pointer){
        
            
    set_p(in_pointer);

        }

        
    //////////////////// operator () defined to pass the pointer to a general pointer and remove the permission to delete data
        
    operator() ( TIPO new_pointer  ) {
            
    new_pointer pointer;
            
    ownership 0;
        }


    private:

        
    void set_p TIPO in_pointer){
            
    pointer in_pointer;
            
    ownership 1;
        }

        
    TIPO pointer// the pointer storage
        
    int ownership// permission to delete data

    };


    int main () {
        
        
    unique_pointer <string u_pointer// create a smart pointer u_pointer;
        
    u_pointer = new string("ciao"); // new return address to u_pointer

        
    stringstring_pointer;  // general pointer to a string class
        
    u_pointer(string_pointer); // u_pointer pass it's hidden pointer address to string_pointer


        
    cin.get(); //

    return 0;


    | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio
Working...
X

Google Profile


My name is Giovanni Di Grezia, but people call me xgiovio.

Here is my homepage:.

I'm a VFX Artist and Software Developer.

Giovanni Di Grezia