たとえば、次のようにしますstruct
。
struct Point{
int x;
int y;
};
そして、この構造体へのポインターを宣言しました。
Point* p;
p
その、ヒープまたはスタックの x と y はどこにありますか?
それはクラスでも同じですか?
その、ヒープまたはスタックはどこに
x
ありますか?y
p
どこにもない。オブジェクトを作成したのではなく、オブジェクトを指すポインタを作成しただけです。
スタック上に自動オブジェクトを作成する場合、それは次の場所になります。
Point point;
Point * p = &point;
ヒープ上に動的オブジェクトを作成すると (正式にはフリー ストアと呼ばれます)、そこに配置されます。
Point * p = new Point; // Don't forget to delete it.
それはクラスも同じですか?
はい; astruct
はクラスです。
どのように初期化するかによって異なりますp
。変数x
とy
は、何p
を指していても含まれます。それがヒープ上にある場合、それらはヒープ上にあります。スタック上にある場合はスタック上にありp
、静的変数を指している場合はどちらでもありません。
ヒープとスタックは忘れてください。これらはコンパイラの実装の詳細です。関心があるのは、ビットがどこにあるかではなく、ビットの寿命です。
また、C++ には実際には構造体がありません。使用されるキーワード ( struct
、class
またはunion
) に関係なく、宣言されるのはクラス型です。(クラスの型は、共用体と非共用体の 2 つの大きなカテゴリに分けられます。)