----- Original Message -----
From: Peter Dimov
From: "Louis Lavery"
Hello,
The following is use by the boost shared_ptr assignment operators (see boost\smart_ptr.hpp)...
void share(T* rpx, long* rpn) { if (pn != rpn) { // Q: why not px != rpx? A: fails when both == 0 ++*rpn; // done before dispose() in case rpn transitively // dependent on *this (bug reported by Ken Johnson) dispose(); px = rpx; pn = rpn; } } // share
...I curious to know what it means by "fails when both == 0".
It's possible that px == rpx == 0, yet pn != rpn.
-- Peter Dimov Multi Media Ltd.
Hello, Yes, I see that, but I can't see what's wrong with using the test "if ( px != rpx )". Or, to put it another way, if px == rpx == 0 who cares whether pn equals rpn or not? Louis.