}
ptr& operator= (const ptr& p) {
// be careful -- we need to properly handle self-assignment.
+ if (p._raw)
+ p._raw->nref.inc(); // inc new
+ release(); // dec (+ dealloc) old (if any)
if (p._raw) {
- p._raw->nref.inc(); // inc new
+ _raw = p._raw;
+ _off = p._off;
+ _len = p._len;
+ } else {
+ _off = _len = 0;
}
- release(); // dec (+ dealloc) old (if any)
- _raw = p._raw; // change my ref
- _off = p._off;
- _len = p._len;
return *this;
}
~ptr() {