Распределяется ли в стеке, как любые другие локальные данные (int, double и т. Д.), Или вызывается конструктор по умолчанию, а память выделяется в куче?
Распределяется на локальное хранилище (стек).
Объект будет создан в Freestore (куче) только в том случае, если при его создании используется любая из new
версий операторов (за исключением, возможно, размещения новых).
Кроме того, ваш объект структуры не сохраняется за рамками функции, в которую он включен. Объект Freestore (Heap) будет сохраняться до тех пор, пока вы явно не вызовете delete для него.
Каждый раз, когда вы создаете объект структуры / класса, для этой структуры / класса будет вызываться соответствующий конструктор (путем сопоставления типов параметров). В вашем случае вы не передаете никаких аргументов при создании объекта, поэтому будет вызван конструктор Default.
А что если структура инициализируется так: struct timeval a = {0, 0};
Он все еще выделен как объект с локальным хранилищем.
Попытка решить, лучше ли сделать структуру членом класса или иметь его как локальный метод, поскольку метод вызывается довольно часто и должен быть максимально быстрым.
Создание объектов в локальном хранилище (стеке) происходит быстрее, чем их создание в Freestore (Heap).
Тем не менее, в вашем случае вы вообще не используете кучу.
Фактическое профилирование примера кода скажет вам, какой из них (локальная структура или член класса) лучше соответствует вашим требованиям к производительности.
Однако, подумайте, как структура связана с вашим классом, прежде чем сделать его членом. Имеет ли он отношение has a
к вашему классу или это просто служебная структура. Вы должны учитывать этот аспект дизайна.
Также существует несколько ограничений в том, что может быть доступно внутри локальной структуры или класса, так что имейте это в виду.