Если какая-то функция внутри класса C ++ не имеет доступа ни к одному из своих членов, как в этом случае для функции show (), то даже после того, как объект уничтожен, если вызывается такая функция, то она работает!!!Даже если вы сделаете указатель равным nullptr !!!
Это не удивительно, потому что мы можем думать, что компилятор C ++ генерирует простые функции, подобные C, для функций класса, и добавляет объект самого класса в качестве аргументатакая функция.Пока к указателю нет доступа, проблем не будет.
Однако, в целом, полагаться на такое поведение не рекомендуется.
Кроме того, не рекомендуется сначала создавать объект в куче, а затем добавлять его в shared_ptr.Вместо этого создайте анонимный объект непосредственно следующим образом:
std :: shared_ptr xs1 (new X);
И никогда не имейте никакого другого дескриптора для указателя объекта, на который указывает shared_ptr, потому что, shared_ptr должен управлять жизненным циклом.