Allow copying scoped_nsobject of different type.
This code was leading to a crash: scoped_nsobject<MyClass> a([[MyClass alloc] init]); scoped_nsobject<NSObject> b(a); Because |a| is converted to raw pointer, and |b| is constructed with the raw pointer, without calling retain. This creates a subtle crash later on when the scoped_nsobject are destroyed. This code however, was not crashing: scoped_nsobject<MyClass> b(a); Because in that case the copy constructor is used. This was somewhat inconsistent and bug prone, especially if the type of |a| is changed. In that case the type of |b| must be changed at the same time, or it causes a crash. This CL introduces a new constructor for the scoped_nsobject variants that allows passing a scoped_nsobject of a different type. It is consistent with scoped_refptr which also has this constructor. Review URL: https://codereview.chromium.org/848033006 Cr-Commit-Position: refs/heads/master@{#311487}
Showing
Please register or sign in to comment