My pet peeve with shared is the RoI.
Risk of infection?
You were supposed to use it whenever something is "shared across threads". My problem with it is with the RoI of putting entire object graphs under that type constructor.
If you don't want to share data between threads and have an option to do so, sure do it; shared is for the case when you want to share data.
