Для своего проекта я работаю с анонимными классами в C ++, и мне было интересно, где в памяти они расположены.
Я почти уверен, что это будет распределено в куче, но я хотел бы знать, есть ли у кого-то еще более подробная информация.
Как указано, классы нигде не выделяются. Объекты, которые являются экземплярами анонимного класса, могут быть распределены несколькими способами:
Например, в качестве подобъектов другого объекта:
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;
}
Если анонимный класс является частью другого класса или структуры, он будет размещен вместе с окружающим классом или структурой, будь то в куче или в стеке.
Если анонимный класс является глобальной переменной, он хранится вместе с другими глобальными переменными.
Если анонимный класс является локальной переменной, он хранится в стеке вместе с другими локальными переменными функции, в которой он определен.