これら2つのクラス初期化子の違いは何ですか? myClass myObject; myClass *myPointer1; myPointer1 = &myObject;
C++クラス・ポインタとクラス・オブジェクトの間の違いは何ですか?
と myClass *myPointer2 = new myClass;
最初のポインタはに第2のポインタのポイントを行うクラス・オブジェクトへのポインタだけであれば?
これら2つのクラス初期化子の違いは何ですか? myClass myObject; myClass *myPointer1; myPointer1 = &myObject;
C++クラス・ポインタとクラス・オブジェクトの間の違いは何ですか?
と myClass *myPointer2 = new myClass;
最初のポインタはに第2のポインタのポイントを行うクラス・オブジェクトへのポインタだけであれば?
myPointer1
は、自動保存期間を持つオブジェクトを指します。したがって、myPointer1
は自身のというオブジェクトではなく、単にそのオブジェクトにアクセスする手段に過ぎません。一方、myPointer2
は、オブジェクトにアクセスするために使用されるmyPointer2
だけでなく、メモリリークを避けるためにオブジェクトを後でdelete
に使用する必要があります。
myPointer1
は「スタック」を指し示し、myPointer2
は「ヒープ」を指しているとよく言われ、自動および動的記憶期間の共通の実装方法を反映しています。
ポインタが値を調べるだけで、ポインタが自動保存期間のオブジェクトまたは動的保存期間のオブジェクトを指しているかどうかを判断することはできません。メモリリークを避けるには、スマートポインタオブジェクト(std::unique_ptr<myClass>
など)を使用する必要があります。
スタックとヒープは実装の詳細です。それらは存在しないかもしれない。 – user4581301
私はOPがスタックとヒープが存在するシステムのために書いていると確信しています。 –