質問: new Point(1, 1); } ~MainClass() { delete point2; } }; ``` とした場合、動きはどちらも同じになるように思います。 加えて、 C++言語、ポインタを使わないプログラミング こちらのページではポインタによりインスタンスを生成せずにインスタンスを変数として所有することを勧めています。 一体どういうときにはポインタとして持つべきでどういうときには持たざるべきなのか、その基準の目安といったものもわかりません。 周りに教えてくれる人がおらず、用語がおかしかったり、頓珍漢な質問になってしまっていたりしているかもしれませんが教えてくださると助かります。 よろしくお願いします。
回答: まず、既存のライブラリに合わせるためにどうしても必要だとか、速度や資源などを極限まで使うようなプログラミングを除いて、そのままポインタを使うこと(特に、オブジェクトをポインタで指すこと)はあまりおすすめできません。C++のクラスで作った、より便利かつ安全な**スマートポインタ**があるので、そっちを使いましょう(Qiita)。 C++言語特有の「参照を介さないオブジェクト」ですが、特徴として「変数代入などがコピーで処理される」ということがあります。そのため、 * コピーされても困らない(というよりコピーしたほうが便利な)、上の`Point`のような値クラス * 逆に、コピーすることが不適切となる、何かしらの資源を、ローカルに扱うクラス(スマートポインタ自体のクラスや、ファイルアクセスを行うクラスなど) のようなものは、直接変数に入れたほうが扱いやすいです。逆に、連結リストや木構造といった、複数箇所からの参照が必要なオブジェクトは、参照なりポインタなりを使うしかありません。