c ++中的匿名类

时间:2012-12-05 11:21:35

标签: c++ memory-management anonymous-class

对于我的项目,我正在使用C ++中的匿名类,我想知道它们在内存中的分配位置。

我很确定会在堆上分配,但我想知道是否有其他人有更详细的信息。

2 个答案:

答案 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)

如果匿名类是另一个类或结构的一部分,那么它将与周围的类或结构一起分配,无论是在堆上还是在堆栈上。

如果匿名类是全局变量,则它与其他全局变量一起存储。

如果匿名类是局部变量,它将与它定义的函数的其他局部变量一起存储在堆栈中。