1

たとえば、次のようにしますstruct

struct Point{
    int x;
    int y;
};

そして、この構造体へのポインターを宣言しました。

Point* p;

pその、ヒープまたはスタックの x と y はどこにありますか?

それはクラスでも同じですか?

4

3 に答える 3

4

その、ヒープまたはスタックはどこにxありますか?yp

どこにもない。オブジェクトを作成したのではなく、オブジェクトを指すポインタを作成しただけです。

スタック上に自動オブジェクトを作成する場合、それは次の場所になります。

Point point;
Point * p = &point;

ヒープ上に動的オブジェクトを作成すると (正式にはフリー ストアと呼ばれます)、そこに配置されます。

Point * p = new Point; // Don't forget to delete it.

それはクラスも同じですか?

はい; astructはクラスです。

于 2013-10-04T16:10:22.473 に答える
1

どのように初期化するかによって異なりますp。変数xyは、何pを指していても含まれます。それがヒープ上にある場合、それらはヒープ上にあります。スタック上にある場合はスタック上にありp、静的変数を指している場合はどちらでもありません。

ヒープとスタックは忘れてください。これらはコンパイラの実装の詳細です。関心があるのは、ビットがどこにあるかではなく、ビットの寿命です。

また、C++ には実際には構造体がありません。使用されるキーワード ( structclassまたはunion) に関係なく、宣言されるのはクラス型です。(クラスの型は、共用体と非共用体の 2 つの大きなカテゴリに分けられます。)

于 2013-10-04T15:54:42.390 に答える