Yes, it's a kind of pimpl (not completely because there is no "implementation" in the private component, just data). I call this construction a "pointer without pointers".
Could be, I didn't test the code before posting.But I see BUG in this code) - it seems recursive parent destruction - you must use QWeakPointer for parent.
Bookmarks