Конструкторы не имеют значения, если у вас уже есть указатель. Что касается деструкторов - если у вас есть личный, вы не сможете delete
есть, и, я полагаю, это также помешает вам создать экземпляр shared_ptr
(как указал Дандрестор - если вы не предоставите пользовательский удалитель, который вы можете использовать не только с shared_ptr
).
Все ограничения налагаются во время компиляции, поэтому, если вам не удастся освободить память из-за проблем конфиденциальности , вы получите уведомление во время компиляции.