I see you “removed OwnedArray::addIfNotAlreadyThere because it’s ambiguous about whether the object should be deleted if it fails to be added!”
This method still exists for Array… And I can modify my code to deal with the loss of this OwnedArray method… but wouldn’t it have been easier to add a default parameter to deal with the ambiguity rather than just remove the method?
It’s not a problem in Array because that doesn’t take ownership - it’s only in OwnedArray where it wasn’t clear that if it wasn’t added, the object wouldn’t be deleted, and I bet that it caused a few leaks in people’s code!
I did think about modifying it, but TBH I don’t think the method belongs there at all - I’d rather see code like…
std::unique_ptr<Foo> myFoo = ...
if (! myOwnedArray.contains (myFoo))
myOwnedArray.add (myFoo.release());
which I think is much better pattern to be following, as the calling code then clearly shows what’s going on in terms of ownership.