Каким образом создаётся экземпляр класса? с++

У нас есть простой класс Point:

class Point
{
public:
   float x, y;
   void Set(float x, float y)
   {
       this->x = x;
       this->y = y;
   }
}

Метод Set, насколько я знаю обычная функция,у которой первый параметр, указатель на объект. А что будет с полями y и x, они будут записаны в какую-либо таблицу или что-то другое? Где хранится описание этого класса, то есть оно хранится в оперативной памяти вместе с запуском exe-файла или оно будет действительно только на этапе компиляции. Я вас умоляю помогите мне с этим разобраться, заранее огромное спасибо:)


Ответы (1 шт):

Автор решения: maestro

Если вы определили переменные

Point p1, p2, p3;

то в оперативной памяти резервируется область под хранение всех полей этого класса: x, y. В зависимости от места определения переменной, это может быть в статической памяти, которая выделяется при старте программы (если определили переменную в глобальной области), или в стеке, стековая память выделяется при входе в тело функции (если вы определили эти переменные в теле функции. Память под них выделяется столько раз, сколько переменных вы объявили.

Если вы определили указатель на Point, и создали объект с помощью оператора new, всё происходит точно так же: резервируется память под две переменные, только память выделяется из кучи и происходит это в момент вызова оператора new.

Далее, независимо от способа выделения памяти, вызывается конструктор класса. Хотя он у вас и не определён, но конструктор по умолчанию всегда генерируется компилятором.

Если вы объявили эти переменные в глобальной области (в статической памяти), то они автоматически будут инициализированы нулями. Если в теле функции (в стеке) или с помощью оператора new, то они будут заполнены мусором, и их необходимо инициализировать вручную (это можно сделать в конструкторе).

Методы класса компилируются один раз, и присутствуют в коде в единственном экземпляре. Но к методу, в соответствии с соглашением о вызовах thiscall, прибавляется неявный параметр - указатель на объект, к которому применяется данный метод.

→ Ссылка