
AMDG On 03/18/2011 01:54 PM, pavel wrote:
Steven wrote on Friday, March 18, 2011 at 21:02:13:
Second, how is it horrible? Of course it is (almost) like p.reset(). Assigning anything to a shared_ptr decrements the reference count on the old value. rephrasing your words: how is 'delete p' a bad idea? it's obvious it is almost like 'p.reset()'
No it isn't. The difference is that assignment is a basic operation for a smart_ptr, and it's behaving in the normal way. It isn't a matter of being "almost like" reset.
Except that the tricks you use to implement it result in undefined behavior... i inspected the std and didn't find anything which may result in undefined behavior
did i miss anything?
[expr.delete] "...In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10). If not, the behavior is undefined." In Christ, Steven Watanabe