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.
Understandable. When member scoped_ptr may not be NULL you need it to
be checked in constructors and where it is reset().
important thing. Usualy it is written by human what you parse and