Boost logo

Boost :

From: Jeffrey D. Paquette (paquette_at_[hidden])
Date: 2000-04-30 11:22:22


Ah, yes, I missed that! My intent was to prevent misuse-by-misunderstanding,
but since those same programmers would slap a :: to new (since half of them
do a global 'using namespace std;') and defeat the mechanism anyway.

Well, my goal was to learn something...

Thanks for your input.

--
Jeff Paquette
paquette_at_[hidden], paquette_at_[hidden]
http://www.atnetsend.net
-----Original Message-----
From: Saul Tamari [mailto:saul_tamari_at_[hidden]]
Sent: Sunday, April 30, 2000 1:34 AM
To: 'boost_at_[hidden]'
Subject: [boost] RE: class nonallocatable
Importance: High
HI
I think that even though you declared the various new & delete operators to
be private, a user may still dynamicaly allocate an object of your class
using the global new.
bye
saul
> ----------
> From: 	Jeffrey D. Paquette
> Reply To: 	boost_at_[hidden]
> Sent: 	Saturday, April 29, 2000 3:06 PM
> To: 	boost_at_[hidden]
> Subject: 	[boost] Proposal: class nonallocatable
>
> I've been following this group for a few months now and have seen several
> variations of scoped utility classes fly by (shared_ptr, deferred_value,
> etc) and it seems that all of these classes, including a few that I've
> written have one drawback that can lead to misuse: they all can be
> dynamically allocated, thus bypassing the intent of the class.
>
> So, in the spirit of noncopyable, here is a first cut at nonallocatable:
>
> class nonallocatable {
> private:
>   // single instance new and delete
>   void *operator new(size_t);
>   void operator delete(void *);
>   void *operator new(size_t, const std::nothrow_t&) throw ();
>   void operator delete(void *, const std::nothrow_t&) throw ();
>   // array new and delete
>   void *operator new[](size_t);
>   void operator delete[](void *);
>   void *operator new[](size_t, const std::nothrow_t&) throw ();
>   void operator delete[](void *, const std::nothrow_t&) throw ();
>   // placement new and delete
>   void *operator new(size_t, void *) throw ();
>   void operator delete(void *, void *) throw ();
>   void *operator new[](size_t, void *) throw ();
>   void operator delete[](void *, void *) throw ();
> };
>
> The idea is to derive scope-helper classes from nonallocatable, thus
> preventing the misuse of these classes, like so:
>
...
------------------------------------------------------------------------
Accurate impartial advice on everything from laptops to table saws.
http://click.egroups.com/1/3020/2/_/9351/_/957069084/
------------------------------------------------------------------------

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk