Working on the patch D84257 I noticed that both BreakpointLocation and BreakpointSite were inherited from StoppointLocation. Also, I noticed that they have not so much in common, except the //id// and hit counting logic.
There is no polymorphic code that uses a pointer/reference to StoppointLocation to handle one of BreakpointLocation and BreakpointSite either.
The patch renames StoppointLocation to StoppointSite and stops BreakpointLocation's inheriting from it.
Hit counting is encapsulated into StoppointHitCounter which is re-used it in StoppointSite, BreakpointLocation, and Breakpoint.