1
class A {
  public:
    int i;
};

int main() {
  A *obj = new A();
  return 0;
}

次のコードでは、A のオブジェクトを作成するとヒープに作成されますが、作成された obj の i のメモリはどこにあるのでしょうか?? ヒープまたはスタックで作成されていますか、それとも別の動作がありますか??

4

1 に答える 1

5

そのままでは、コードはコンパイルされません-newポインターを返し、それをポインターではなくオブジェクトに割り当てようとしています(おそらくJavaに慣れていますか?)

それを修正すると仮定します:

A *obj = new A();

を指すオブジェクト全体objがヒープに割り当てられます。これには、 のストレージが含まれiます。objそれ自体はポインタであり、autoストレージに割り当てられます (つまり、通常はスタック上)。

余談ですが、とにかくこれをやりたいというのはかなり珍しいことです。ほとんどの場合、オブジェクト (例: A obj;) を定義するだけで、ヒープ割り当てが関係している場合は、オブジェクトがそれを管理します (オブジェクトが範囲外になったときのストレージのクリーンアップを含む)。

于 2012-10-08T16:31:32.710 に答える