Boost logo

Boost Users :

Subject: Re: [Boost-users] scoped_ptr initialization
From: Peter Barker (newbarker_at_[hidden])
Date: 2008-09-11 09:13:17


On Thu, Sep 11, 2008 at 11:24 AM, UberMongoose <mongoose7_at_[hidden]> wrote:
>
> Hi All,
>
> I'm new to Boost, and I've been taking a look at scoped pointers. Here's the
> example from the boost documentation:
>
> ----------------------------------------------------------------------
> #include <boost/scoped_ptr.hpp>
> #include <iostream>
>
> struct Shoe { ~Shoe() { std::cout << "Buckle my shoe\n"; } };
>
> class MyClass {
> boost::scoped_ptr<int> ptr;
> public:
> MyClass() : ptr(new int) { *ptr = 0; }
> int add_one() { return ++*ptr; }
> };
>
> int main()
> {
> boost::scoped_ptr<Shoe> x(new Shoe);
> MyClass my_instance;
> std::cout << my_instance.add_one() << '\n';
> std::cout << my_instance.add_one() << '\n';
> }
>
> ----------------------------------------------------------------------
>
> I notice that the creation of a new object for the scoped pointer has been
> done before the MyClass constructor. However you can't declare the scoped
> pointer as a member variable and then do something like this in a method:
>
> protected:
> scoped_pointer<ArbitaryObject> mPointerToObject;
> ....
> // Later
> mPointerToObject ( new ArbitaryObject() );
>
> Why is that?
Hi,

Quote from the scoped_ptr docs: "The scoped_ptr template is a simple
solution for simple needs. It supplies a basic "resource acquisition
is initialization" facility, without shared-ownership or
transfer-of-ownership semantics."

So, you can't transfer ownership - once it's constructed, it points to
that object for its lifetime.

I use std::auto_ptr or boost::shared_ptr if I want to reassign the
pointer during its lifetime.

Regards,

Pete


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