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;
) を定義するだけで、ヒープ割り当てが関係している場合は、オブジェクトがそれを管理します (オブジェクトが範囲外になったときのストレージのクリーンアップを含む)。