I tried to gather all the shared pointers ideas we discussed with @gladhorn during his refactorings.
Points 1 and 2 are not yet implemented, but would be nice to have.
Point 3 is a real problem we have in Krita (see bug 372184). I don't know how it can be solved in a general way. Any ideas are welcome!