2017-10-15 20 views
-1

これら2つのクラス初期化子の違いは何ですか? myClass myObject; myClass *myPointer1; myPointer1 = &myObject;C++クラス・ポインタとクラス・オブジェクトの間の違いは何ですか?

myClass *myPointer2 = new myClass;

最初のポインタはに第2のポインタのポイントを行うクラス・オブジェクトへのポインタだけであれば?

+0

スタックとヒープは実装の詳細です。それらは存在しないかもしれない。 – user4581301

+0

私はOPがスタックとヒープが存在するシステムのために書いていると確信しています。 –

答えて

1

myPointer1は、自動保存期間を持つオブジェクトを指します。したがって、myPointer1自身のというオブジェクトではなく、単にそのオブジェクトにアクセスする手段に過ぎません。一方、myPointer2は、オブジェクトにアクセスするために使用されるmyPointer2だけでなく、メモリリークを避けるためにオブジェクトを後でdeleteに使用する必要があります。

myPointer1は「スタック」を指し示し、myPointer2は「ヒープ」を指しているとよく言われ、自動および動的記憶期間の共通の実装方法を反映しています。

ポインタが値を調べるだけで、ポインタが自動保存期間のオブジェクトまたは動的保存期間のオブジェクトを指しているかどうかを判断することはできません。メモリリークを避けるには、スマートポインタオブジェクト(std::unique_ptr<myClass>など)を使用する必要があります。

関連する問題