ではこうしようか?
new/deleteを独自定義しているhoge_tクラスがあったとしよう

struct piyo_t
{
  int reference_counter;
  hoge_t hoge;
};
auto piyo = new piyo_t;

この場合、hoge_tで独自定義したnew/deleteは呼ばれないが、これはどうするんだ?
C++はこーゆー入れ子の構造体を認めているし
実際make_shared内で起こっていることもコレなわけ
これを一切禁止するときは、コンスラクタ/デストラクタを隠す
逆にコンストラクタ/デストラクタが公開されているということは
こーゆーのを認めているということ