对于我的项目,我正在使用C ++中的匿名类,我想知道它们在内存中的分配位置。
我很确定会在堆上分配,但我想知道是否有其他人有更详细的信息。
答案 0 :(得分:3)
正如所指出的,类不会在任何地方分配。 对象,它们是匿名类的实例,可以通过多种方式进行分配:
例如,作为另一个对象的子对象:
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;
}
答案 1 :(得分:1)
如果匿名类是另一个类或结构的一部分,那么它将与周围的类或结构一起分配,无论是在堆上还是在堆栈上。
如果匿名类是全局变量,则它与其他全局变量一起存储。
如果匿名类是局部变量,它将与它定义的函数的其他局部变量一起存储在堆栈中。