struct Hoge {
Foo* foo;
};

この構造体が所有するfooはこの構造体が所有しているのか?
所有している場合、他に外部で参照しているオブジェクトはないのか?
それは弱参照としての扱いかそれとも所有者として振る舞っているのか?
fooは共有されるのか?
fooの生存期間は?
fooの初期化方法は?
デストラクタなどで勝手に破棄して良いのか?
(他に参照がある場合、ダングリングポインタ発生)
このオブジェクトは変更されるのか?されないのか?
このオブジェクトがコピーされる時の動作は?
クローンすべきなのかムーブすべきなのか
ポインタのコピーで良いのか?

C/C++の問題点はこれに尽きる
何もわからないのだ
C++だともう少し明確になるが問題は変わらない
上記を全てクリアにするために文法や仕組みを考えたらrustになったと言う話