Well, it’s quite reasonable for that to happen - deleteAndZero used to be a macro, but now it’s a function, so it’s understandable that it shouldn’t be able to access a private destructor.
There are a whole load of different ways you could work around this - make deleteAndZero a friend function, or just call delete directly. Interesting that you had a problem with ScopedPointer because OwnedArray uses it internally… I might tweak that, or else you’d need to make ScopedPointer a friend class as well as OwnedArray, which seems a bit unnecessary.
But the most important advice would be never to use deleteAndZero or delete! Use stack objects, containment, ScopedPointers, etc manage your lifetimes! If this “instance” thing is a static variable, use the juce_DeclareSingleton stuff to manage it (or better still, find a way to NOT use a static, and make it a ReferenceCountedObject or something!)