class A { B* b };

A::A() { b = new B(); }

こうやると実行時エラーになるのに
class A { std::shared_ptr<B> b };

A::A() { b= new shared_ptr<B>(); }

だとエラーになりません。
これはやってもいいことがやれているのか
やってはいけないことがやれてるだけなのか教えてください