управление памятью — анонимные классы в переполнении стека

Для своего проекта я работаю с анонимными классами в C ++, и мне было интересно, где в памяти они расположены.

Я почти уверен, что это будет распределено в куче, но я хотел бы знать, есть ли у кого-то еще более подробная информация.

0

Решение

Как указано, классы нигде не выделяются. Объекты, которые являются экземплярами анонимного класса, могут быть распределены несколькими способами:

Например, в качестве подобъектов другого объекта:

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;
}
3

Другие решения

Если анонимный класс является частью другого класса или структуры, он будет размещен вместе с окружающим классом или структурой, будь то в куче или в стеке.

Если анонимный класс является глобальной переменной, он хранится вместе с другими глобальными переменными.

Если анонимный класс является локальной переменной, он хранится в стеке вместе с другими локальными переменными функции, в которой он определен.

1

По вопросам рекламы [email protected]