MyClass* obj;
と MyClass obj;
目を細めてみたら同じに見えるこの二つは大きく異なるようです。
前者はオブジェクトがインスタンス化されておらず、後者はインスタンス化されています。
前者(ポインタのほう)
MyClass* obj;
これはobjという、MyClass型のポインタ変数を作っただけです。obj = new MyClass();
といった処理で初めてメモリが確保され、オブジェクトがインスタンス化されます。
他の例では、例えばint* x
では「int型のポインタ変数x」を宣言します。この時点ではメモリは確保されません。x = new int;
とかを書いて初めてメモリが確保されます。
後者(ポインタじゃない変数の方)
MyClass obj;
これはオブジェクトがインスタンス化され、メモリも同時に確保されます。
以降は追記した細かい内容になります
new 演算子を使用した場合、その結果は自動的にポインタになる。
地味に知らなかった...いつも「なんで"&"がないんだ...?」ってなってたのでスッキリしました。ポインタにそのままpointa = new ...
として代入できるんですね。
まとめ
順次わかりづらい部分を発見したら追記しようと思います。初学者の方々の助けになれば幸いです(僕も初学者ですが...)。