Boost logo

Boost Users :

From: Julia Donawald (yg-boost-users_at_[hidden])
Date: 2002-09-08 06:25:11


Hi,
I have written the following code to simulate my problem:

#include <vector>
#include <shared_ptr.hpp>

class Foo
{
public:
    Foo()
     {
     };
     virtual ~Foo()
     {
     };
};

class Vector_Foo
{
public:
     Vector_Foo()
     {
     };
     virtual ~Vector_Foo()
     {
     };
     void AddFooObject(Foo* pFoo)
     {
          FooDataPtr ptrFoo(pFoo);

          m_vecChildren.push_back(ptrFoo);
     };

protected:
     typedef boost::shared_ptr<Foo> FooDataPtr;

     typedef std::vector<FooDataPtr> FooVector;

     FooVector m_vecChildren;
};

int main( )
{
     Vector_Foo vec;
     Foo* pFoo = new Foo();

     vec.AddFooObject(pFoo);
     vec.AddFooObject(pFoo);

     return 0;
}

When I now leave the function main, and the vec-Object is deleted I got an
exception in the function:
template< typename T > inline void checked_delete(T * x)
{
    typedef char type_must_be_complete[sizeof(T)];
    delete x;
}
in checked_delete.hpp

What have I done wrong? Why doesnt my code work? Should I use another class
then shared_ptr to do that what I want, namely to insert 2 pointers to the
same Object in a vector?

Thanks in advance
Julia


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net