class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
次のコードでは、A のオブジェクトを作成するとヒープに作成されますが、作成された obj の i のメモリはどこにあるのでしょうか?? ヒープまたはスタックで作成されていますか、それとも別の動作がありますか??
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
次のコードでは、A のオブジェクトを作成するとヒープに作成されますが、作成された obj の i のメモリはどこにあるのでしょうか?? ヒープまたはスタックで作成されていますか、それとも別の動作がありますか??
そのままでは、コードはコンパイルされません-newポインターを返し、それをポインターではなくオブジェクトに割り当てようとしています(おそらくJavaに慣れていますか?)
それを修正すると仮定します:
A *obj = new A();
を指すオブジェクト全体objがヒープに割り当てられます。これには、 のストレージが含まれiます。objそれ自体はポインタであり、autoストレージに割り当てられます (つまり、通常はスタック上)。
余談ですが、とにかくこれをやりたいというのはかなり珍しいことです。ほとんどの場合、オブジェクト (例: A obj;) を定義するだけで、ヒープ割り当てが関係している場合は、オブジェクトがそれを管理します (オブジェクトが範囲外になったときのストレージのクリーンアップを含む)。