ну смотри, я когда пользуюсь указателями, я представляю, что классы - это арендодатели и арендаторы, а память это земля. Далее ты проецируешь способ взаимодействия классов и оттуда делаешь вывод, какой указатель использовать в текущей реализации.
Unique - это когда класс является прям барином куска памяти - он тут владелец, он несет ответственность за свой обьект один и распоряжается этой памятью он один
Shared - это коллективное владение, типа в складчину, коммунальная квартира) когда нескольким классам жизненно необходим какой то участок памяти то использовать надо как раз шаред, как правило используется для тех конструкций, которые изменяются из множества разных классов на равных правах
Weak - во всех отношениях это арендатор - он временно пользуется памятью принадлежащей либо барину либо шаредам, чаще лучше использовать его, особенно если нужен доступ только на чтение
weak — это кандидат в члены колхоза, который потом (возможно) становится полноправным членом колхоза