Метод класса создается для каждого объекта класса или одна для всех?
Методы класса создаются для каждого объекта отдельно или они создаются в начале программы, и доступ к ним осуществляется только через объект класса?
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 шт):
Вызов одного метода класса разных экземпляров этого класса имеет одно и то же расположение в памяти и соответственно одинаковый адрес вызова.
Но. Современные компиляторы хорошо оптимизируют, и не редко, что некоторые методы вообще не имеют отдельного адреса вызова, т.к. они заинлайнены в другой код. В данном случае, такой метод имеет множественное инжектирование в скомпилированном коде, но эта множественность зависит не от различных экземпляров класса, а от точек вызова этого метода.