Boost logo

Boost Users :

From: Joshua Little (ljoshua_at_[hidden])
Date: 2004-02-04 02:22:31


I've been using shared pointers for a few months now and just discovered
I have been using them the wrong way, causing massive memory leaks. So
I'm going back through my code and cleaning everything up and making the
changes to correct all the mistakes I had been making. So now I've run
into a bit of a problem. I'm using Boost 1.30.2 currently and I have
function that takes in a Base class to place into a vector, but I have a
number of Derived classes that will be going into the vector as well.
 From reading through the docs and the mailing lists everything seems to
indicate that the conversion should be implicit and there shouldn't be a
problem.
I have the feeling I am missing something here so I was wondering if
someone could point out my error.

So I have something like this:

 std::vector<boost::shared_ptr<Base> > BaseVector;

void add(boost::shared_ptr<Base>& newOne) {
    BaseVector.push_back(newOne);
}

and I call it like this usually :
boost::shared_ptr<Derived> p(new Derived);
add(p);

I thought that it would work just like using raw pointers (which was
working) but I get a compile time error that :
no matching function call to add(boost::shared_ptr<Derived>&) canadites are
    add(boost::shared_ptr<Base>&).. ect.

So I think I'm doing this the wrong way, about the only thing I can
think of was something I saw in a few postings.
Essentially creating a new pointer with the derived pointer then passing
it into the function like this :
boost::shared_ptr<Derived> p(new Derived);
boost::shared_ptr<Base> q(p);
add(q);
Is that the preferred way of doing it? Or is there another step I'm
missing when creating the shared_ptrs to allow them to be
implicitly converted?
Thanks,
Joshua.


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