Re: A scoped_ptr class that does not allow NULL ?
On May 31, 8:23 pm, =D6=F6 Tiib <oot...@hot.ee> wrote:
On 1 juuni, 03:32, Tim H <thoc...@gmail.com> wrote:
Does such a thing exist? It seems handy for self-documenting, at
least.
I whipped this up. Am i missing something?
<snip implementation>
Why you need it not to be NULL? NULL is important value of pointer.
Typical usage:
class Bar
{
public:
Bar();
beTricky();
};
void foo()
{
boost::scoped_ptr<Bar> BarPtr; // is NULL
try
{
// can't declare BarPtr here, otherwise would
// be destroyed at end of block
BarPtr.reset( new Bar() );
}
catch( ... )
{
// error handling, not sure it rethrows
// and may result BarPtr remains NULL
}
if ( BarPtr )
BarPtr->beTricky();
}
IOW i do not understand usage of pointers that can not be NULL. Can
you elaborate?
I have a lot of classes that take ownership of pointers (part of a
syntax tree for a language grammar). Those pointers can not be NULL,
or else the classes do not work.
I found myself littering the code with either asserts or with tests
for NULL, or else I kept referring back to the grammar to see if NULL
was viable (in some cases it is, in many it is not). I found myself
wanting a scoped_ptr class member that gets initialized from the ctor
and is very clear about ownership and expectations.
Now, I just look at the data member and it is
"NeverNullScopedPointer<Expression> m_expr;" and I know that the
expression is required to be non-NULL.
Adding the extra traps for NULL literals actually caught one place
where I had screwed up, and making the ctor arg not have a default
value of NULL caught 2 places where I had forgotten to init a pointer.
So that was my use case. I was just wondering if there was already
something like this or if this was actually useful. Also hoping to
get feedback on any screw-ups I made.
FWIW: I also made a MaybeNullScopedPtr<T> class which is just
boost::scoped_ptr. :)
Tim