2009/10/1 Daniele Barzotti <daniele.barzotti@eurocomtel.com>
Hi,

I've a doubt about shared_ptr...
Suppose to have something like this:

template<typename T>
class Interface {..pure virtual..}

template<typename T>
class Impl1 : public Interface<T> {....}

template<typename T>
class Impl2 : public Interface<T> {....}

class A
{
 public:
   Interface<int>* GetObjPtr() { return &obj; }

 private:
   Impl2<int>  obj;
};

class B
{
  ~B()
  {
    delete a_ptr;
  }

  B()
  {
    a_ptr = new A;
    Int_ptr.reset( a_ptr->GetObjPtr );

I assume you mean Int_ptr.reset( a_ptr->GetObjPtr() );
 
  }

  private:
    A* a_ptr;
    shared_ptr< Interface<int> > Int_ptr;
};

Where B creates and use A on its internal.
In this case, is 'delete' called twice for Impl2?

Yes. When you passed a pointer to shared_ptr, you don't own this pointer anymore, so you shouldn't delete it manually.

Roman Perepelitsa.