1

重複の可能性:
このタイプのメモリはヒープまたはスタックに割り当てられますか?

class foo{
private:
int bar;
constructors and other members here...
}

foonew 演算子を使用してインスタンスを作成すると、どこに作成されますか?

ヒープだと思いint bar;ますが、スタックまたはヒープはどこで作成されますか?

また、 mybarがプリミティブ データ型ではなく、 のように作成された別のオブジェクトthis->bar=bar();である場合、どこに作成されるのでしょうか?

4

3 に答える 3

1

クラスインスタンスがメモリ内でどのように構築されるかについて読んでください。ここで簡単な説明

メンバーは、メモリ内のクラスインスタンスのチャンクの一部です。したがって、そのクラスインスタンスが割り当てられる場合は常に、メンバーを含むチャンク全体が割り当てられます。

于 2012-07-31T11:23:26.307 に答える
1

ヒープ内に作成fooしたので、すべてのメンバー変数プリミティブ/非プリミティブもヒープ内にあります。

ケース 1:

Foo *obj = new Foo();

バーはヒープにあります:

ケース 2:

Foo obj ;

バーはスタックにあります:

標準に従って

3.7.4 サブオブジェクトの期間 [basic.stc.inherit]

メンバー サブオブジェクト、基底クラス サブオブジェクト、および配列要素の保存期間は、それらの完全なオブジェクトの保存期間 (1.8) です。

于 2012-07-31T11:18:29.010 に答える
0

自動(で作成されていないnew)オブジェクト/値は、そのコンテナオブジェクト内に作成されます。それらが独立している場合、それらはスタックに作成されます。

この場合、は、ヒープ内に作成されたインスタンスでbarあるコンテナオブジェクト内に作成されます。fooしたがって、インスタンスbar内のヒープに移動します。foo

于 2012-07-31T11:23:53.967 に答える