Почему конструкторы в типах не занимают место?

122
28 декабря 2019, 11:00

Есть структура:

struct tube
{
  char var1;
  int var2;
  char var3;
}
int main()
{
    std::cout << sizeof(tube);
}

Она имеет фиксированный размер. Почему когда я добавляю методы к этой структуре:

#include <iostream>
struct tube
{
  char var1;
  int var2;
  char var3;
  tube()
  {
      var1 = 0x00;
      var2 = 0x04030201;
      var2 = 0x05;      
  }
  void A(){
  }
};
int main()
{
    std::cout << sizeof(tube);
}

ее размер не меняется? Разве структура внутри себя не хранит указатели, занимающие ее память, на свои методы?

Answer 1

Действительно указателей на методы внутри структуры не хранится.

Каждый метод объявенный внутри структуры по сути (и в ассемблерном коде после компиляции) является функцией, первый аргумент которой -- адрес экземпляра этой структуры.

Код

struct foo
{
  int bar;
  int baz() { return bar * bar; }
}

По сути эквивалентен

struct foo
{
  int bar;
}
int baz(foo *f) { return f->bar * f->bar; }
Answer 2

Невиртуальные методы класса - это просто обычные посторонние функции со скрытым параметром this. На низком уровне никакого отношения к классу они не имеют и на размер класса никак не влияют.

Почему вы решили, что в классе должны храниться какие-то "указатели" на такие методы - не ясно.

READ ALSO
Чтение данных из файла с помощью fprintf

Чтение данных из файла с помощью fprintf

Синтаксических ошибок нет, а файл не выводит на консоль

135
Xlib. Получить иконку приложения

Xlib. Получить иконку приложения

Суть задачи в следующем: нужно получить иконку из окна приложения посредством xlib и поместить её в объект wxIcon (или wxImage или wxBitmap - не важно)Как...

156
Как сделать переход из одного фрагмента в другой с помощью кнопки на экране?(без TabLayout)

Как сделать переход из одного фрагмента в другой с помощью кнопки на экране?(без TabLayout)

Как сделать переход из одного фрагмента в другой с помощью кнопки на экране?(без TabLayout)Если можно,буду благодарен за код

240
ImageTextButton как написать

ImageTextButton как написать

как создать ImageTextButton, в интернете гораздо меньше информации об этом, чем о простом ImageButton, есть у кого-то пример создания этой кнопочки с текстом?

143