I l@ve RuBoard Previous Section Next Section

7.1 Smart Pointers 101

So what's a smart pointer? A smart pointer is a C++ class that mimics a regular pointer in syntax and some semantics, but it does more. Because smart pointers to different types of objects tend to have a lot of code in common, almost all good-quality smart pointers in existence are templated by the pointee type, as you can see in the following code:



template <class T>


class SmartPtr


{


public:


   explicit SmartPtr(T* pointee) : pointee_(pointee);


   SmartPtr& operator=(const SmartPtr& other);


   ~SmartPtr();


   T& operator*() const


   {


      ...


      return *pointee_;


   }


   T* operator->() const


   {


      ...


      return pointee_;


   }


private:


   T* pointee_;


   ...


};


SmartPtr<T> aggregates a pointer to T in its member variable pointee_. That's what most smart pointers do. In some cases, a smart pointer might aggregate some handles to data and compute the pointer on the fly.

The two operators give SmartPtr pointer-like syntax and semantics. That is, you can write



class Widget


{


public:


   void Fun();


};





SmartPtr<Widget> sp(new Widget);


sp->Fun();


(*sp).Fun();


Aside from the definition of sp, nothing reveals it as not being a pointer. This is the mantra of smart pointers: You can replace pointer definitions with smart pointer definitions without incurring major changes to your application's code. You thus get extra goodies with ease. Minimizing code changes is very appealing and vital for getting large applications to use smart pointers. As you will soon see, however, smart pointers are not a free lunch.

    I l@ve RuBoard Previous Section Next Section