On Thu, Sep 11, 2008 at 11:24 AM, UberMongoose
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
#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