私のプロジェクトでは、C++ で匿名クラスを使用していますが、それらがメモリ内のどこに割り当てられているのか疑問に思っていました。
ヒープに割り当てられると確信していますが、他の誰かがより詳細な情報を持っているかどうか知りたいです。
私のプロジェクトでは、C++ で匿名クラスを使用していますが、それらがメモリ内のどこに割り当てられているのか疑問に思っていました。
ヒープに割り当てられると確信していますが、他の誰かがより詳細な情報を持っているかどうか知りたいです。
指摘したように、クラスはどこにも割り当てられていません。匿名クラスのインスタンスであるObjectは、いくつかの方法で割り当てることができます。
たとえば、別のオブジェクトのサブオブジェクトとして:
struct S
{
struct {
int x, y;
} p;
};
またはクラス定義と一緒に
struct
{
float x, y;
} p;
または使用decltype
:
struct S
{
struct {
int x, y;
} p;
};
void g (decltype (S::p)) {}
decltype (S::p) *f ()
{
auto p = new decltype (S::p);
g(*p);
return p;
}
匿名クラスが別のクラスまたは構造の一部である場合、ヒープ上またはスタック上にあるかどうかに関係なく、周囲のクラスまたは構造と共に割り当てられます。
匿名クラスがグローバル変数の場合、他のグローバル変数と一緒に格納されます。
匿名クラスがローカル変数の場合、それが定義されている関数の他のローカル変数と共にスタックに格納されます。