Size: a a a

2020 October 01

d

d7d1cd in pro.cxx
Александр Водянников
при вызове data() - происходит вызов дефолтных конструкторов всех полей, тоже самое что и самому указать tm data = {};
А разве при объявлении tm data; не вызывается конструктор по умолчанию?
источник

AK

Andrei K in pro.cxx
Если объект типа Type создаётся на стеке, то нет. Компилятор просто генерирует инструкцию уменьшить стекпоинтер на нужный размер и всё. Весь мусор который остался в стеке — станет частью памяти под объект.
источник

DF

Dollar Føølish in pro.cxx
это не правда
источник

DF

Dollar Føølish in pro.cxx
если тип - класс то будет вызван конструктор по умолчанию, если не под
источник

DF

Dollar Føølish in pro.cxx
даже при отсутсвующем : data{}
источник

d

d7d1cd in pro.cxx
Andrei K
Если объект типа Type создаётся на стеке, то нет. Компилятор просто генерирует инструкцию уменьшить стекпоинтер на нужный размер и всё. Весь мусор который остался в стеке — станет частью памяти под объект.
Но ведь создается объект класса. У него же должен вызваться конструктор по умолчанию.
источник

DF

Dollar Føølish in pro.cxx
да, у тебя видимо просто оно тривиал
источник

DF

Dollar Føølish in pro.cxx
или под
источник

DF

Dollar Føølish in pro.cxx
у компиль не сгенерил ему конструктор по умолчанию
источник

d

d7d1cd in pro.cxx
Dollar Føølish
у компиль не сгенерил ему конструктор по умолчанию
кому? полю data?
источник

DF

Dollar Føølish in pro.cxx
есть хелпер std::is_trivial
источник

АК

Александр Караев... in pro.cxx
d7d1cd
Но ведь создается объект класса. У него же должен вызваться конструктор по умолчанию.
для tm конструктор по умолчанию не обнуляет поля
источник

AK

Andrei K in pro.cxx
Dollar Føølish
если тип - класс то будет вызван конструктор по умолчанию, если не под
tm — тривиальный тип.
источник

DF

Dollar Føølish in pro.cxx
да, получается в этом дело, прошу прощения
источник

d

d7d1cd in pro.cxx
Александр Караев
для tm конструктор по умолчанию не обнуляет поля
Тогда почему такой код обнуляет их?
struct Type {
 // При таком конструкторе все поля data - нули
 Type() : data() {}

 tm data;
};
источник

DF

Dollar Føølish in pro.cxx
потому что это это value-init
источник

DF

Dollar Føølish in pro.cxx
почитайте про типы инициалзизации
источник

d

d7d1cd in pro.cxx
Dollar Føølish
потому что это это value-init
То есть, data() в списке инициализации - это не вызов конструктора по-умолчанию?
источник

DF

Dollar Føølish in pro.cxx
ну тут разница такая же как между new Obj; и new Obj();
источник

d

d7d1cd in pro.cxx
Все равно не понимаю... Попробую почитать про value-init.
источник