
Le Mon, 12 Jun 2006 21:24:03 -0400, me22 a écrit :
You also would never have "sp.reset(p);" if sp used to be a plain pointer, so it's not a problem when refitting existing code to use smart pointers.
But then it makes refitting code to smart pointers a pain. And if anything is wrong with the smart pointers, it's a pain again to remove them. Maybe in most cases, with smart pointer assignation operator, it would only be a matter of commenting all calls to free() or the delete operator and having a typedef for the pointer type and you could easily use smart pointers or not.
But this also renders some uses impossible, like this one:
stack<foo*> fooS; while(shared_ptr<foo> = fooS.pop()) { ... }
I'm not sure what that code's trying to do.
Each of these works fine:
stack<foo*> fooS; shared_ptr<foo> fptr; while ( fptr.reset(fooS.pop()) ) { ... }
stack<foo*> fooS; shared_ptr<foo> fptr; while ( fptr = shared_ptr<foo>(fooS.pop()) ) { ... }
stack<foo*> fooS; shared_ptr<foo> fptr; template <typename T> shared_ptr<T> make_shared_ptr(T *ptr) { return shared_ptr<foo>(ptr); } while ( fptr = make_shared_ptr(fooS.pop()) ) { ... }
stack<foo*> fooS; if ( shared_ptr<foo> fptr( fooS.pop() ) ) { ... }
But it's not possible anymore that the pointer be in the scope of the while() loop. Maybe that's not an issue, though. Would it be OK if an assignable version of the smart pointers was implemented as different classes? That is, if a patch added assignable_shared_ptr and assignable_scoped_ptr? Quickly, Nowhere man -- nowhere.man@levallois.eu.org OpenPGP 0xD9D50D8A