On Wed, 14 May 2003 12:39:09 +0200, Markus Werle <[EMAIL PROTECTED]> wrote:
>Hi! > >In one of Herb Sutters articles I saw that >after deleting a pointer (a pimpl) he assigns 0 afterwards >which seems to me like a good idea. >(see e.g. http://www.gotw.ca/gotw/028.htm or http://tinyurl.com/bq8o) > >Maybe there is a good reason (efficiency?) >why checked_delete omits this extra step. >Please explain. > >template<class T> inline void checked_delete(T * x) >{ > typedef char type_must_be_complete[sizeof(T)]; > delete x; > // why not ? > x = 0; >} This is mostly appropriate for alt.comp.lang.learn.c-c++. But let's take it briefly, to avoid noise here: first of all, you can't nullify the pointer if all you have is a copy of it. Secondly, it can be nullified with something like: #include <cstddef> template <typename T> void delete_and_null(T*& p) { delete p; p = NULL; } but then you can't pass an rvalue: int* f(); delete_and_null( f() ); // can't do Thirdly, nullifying the pointer is generally considered a way to _hide_ bugs, rather than eliminating them. I don't want to be dogmatic here, but I've never encountered the necessity to double delete anything. Genny. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost