Boost logo

Boost :

From: colin.rafferty_at_[hidden]
Date: 2004-10-22 09:11:12


colin rafferty wrote:
> Peter Dimov wrote:
>> Colin Rafferty wrote:

>>> Shouldn't the constructor in intrusive_ptr be explicit?

>> No, the constructor is implicit by design. Do you have a case where the
>> implicit constructor causes problems?

> Sure, this is the same problem as for shared_ptr<>.

> extern void foo(const intrusive_ptr<Bar>&);

> void baz()
> {
> Bar* bar = new Bar;
> foo(bar); // oops!
> delete bar;
> }

> I thought I was passing a raw pointer into foo(), but I'm actually
> creating a temporary intrusive_ptr<Bar>, passing that in, and then
> destroying the temporary and the pointer.

More generally, the problem is that intrusive_ptr<> destroys the
object it is passed (on destruction), and having a conversion
constructor makes it very easy for a programmer to make a mistake
(like above).

Can someone please fix this to make the conversion constructor
explicit?

Thanks.

-- 
Colin

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk