* Alf P. Steinbach:
> I just coded this up, and hopefully by mentioning it here I'll get some
> useful feedback, like, bugs, shortcomings, improvements...
>
>
http://code.google.com/p/alfps/source/browse/trunk/alfs/pointers/AutoNewPtr.hpp
> (http://preview.tinyurl.com/3puorr)
>
> AutoNewPtr ("new" Berkeley open source license)
>
> * Is not initialized with a raw pointer, but with constructor
> arguments for the to-be referent: AutoNewPtr takes responsibility
> for 'new'.
>
> * By doing that, it has the ability to add a notifier to the created
> object, so that the smart pointer gets notified when referred
> object self-destructs, if it does (e.g., a window or file closing,
> or a non-correctable error).
>
> * After referred object destroyed, pointer re****ts that it's void
> and throws on access via ->.
>
> * Also, the default constructor sets the pointer to void state.
>
> * Otherwise much like shared_ptr, except customization of deleter is
> per type (via c++0x-like std::default_delete) rather than per
> instance.
Now added dynamic cast functionality, but so far only the non-throwing
kind, i.e. nullpointer (void pointer) if the cast fails.
In the same way as avoiding explicit 'new' lets you avoid redundantly
stating the type twice -- stating the type twice is more to write
and one more place a little bug might creep in -- I thought it would
be nice if the same could be done for dynamic cast.
So the usage syntax is like (straight from basic test code, i.e. this
is code that compiles and works)
<code>
class PolymorphicA { public: virtual ~PolymorphicA() {} };
class PolymorphicB { public: virtual ~PolymorphicB() {} };
class Polymorphic: public PolymorphicA, public PolymorphicB {};
.....
AutoNewPtr<Polymorphic> p( newNoArgs );
AutoNewPtr<PolymorphicA> a = p;
AutoNewPtr<PolymorphicB> b = a.convertedOrVoid();
b = a.convertedOrVoid();
</code>
Don't know if this is "magic" yet... :-)
> Praise and la****ngs and wild ideas all welcome.
>
> Note that this is just freshly coded, it's currently more idea stuff
> than anything else, but, might still be useful as-is!
Cheers,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|