Метод класса создается для каждого объекта класса или одна для всех?

Методы класса создаются для каждого объекта отдельно или они создаются в начале программы, и доступ к ним осуществляется только через объект класса?

class Tt {
    int x, y, z;
public:
    Tt() {
        reset();
    }

    void reset() {
        x = 0;
        y = 0;
        z = 0;
    }
};

Например sizeof от класса в этом случае будет равен 12.

При вызове метода класса компилятор такую запись some_name.reset() конвертирует в такую: reset(&some_name) Получается что метод(не статический) это обычная функция которая принадлежит классу и доступ к которой осуществляется только через объект класса, у которой левый параметр это указатель на текущий класс


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

Автор решения: Victor Telnov

Вызов одного метода класса разных экземпляров этого класса имеет одно и то же расположение в памяти и соответственно одинаковый адрес вызова.

Но. Современные компиляторы хорошо оптимизируют, и не редко, что некоторые методы вообще не имеют отдельного адреса вызова, т.к. они заинлайнены в другой код. В данном случае, такой метод имеет множественное инжектирование в скомпилированном коде, но эта множественность зависит не от различных экземпляров класса, а от точек вызова этого метода.

→ Ссылка