Пока мы рассматривали только встроенные типы данных. Время жизни динамических объектов встроенных типов начинается с момента выделения памяти и заканчивается в момент ее возврата. Стандарт определяет (см. п. 3.9 в [1]), что объекты встроенных типов относятся к так называемым POD-объектам (Plain Old Data). Помимо встроенных, к POD-объектам относятся перечисления, указатели, массивы, структуры и объединения. Как видим, все типы, изначально определенные в С, относятся к POD-типам. Что касается классов, то POD-клас-сами являются только классы с тривиальным конструктором, Тривиальный конструктор — это конструктор, создаваемый автоматически, и класс при этом должен удовлетворять следующим условиям:
? класс не должен содержать виртуальных функций (см. главу 9);
? все поля в классе должны быть POD-объектами;
? если класс является наследником, то базовый класс должен иметь тривиальный конструктор, и наследование не должно быть виртуальным (см. главу 10).
На практике это означает, что простой класс, не являющийся наследником и не имеющий конструкторов и виртуальных функций, является POD-классом. В частности, пустой класс является POD-классом. Время жизни POD-объектов определяется так же, как и время жизни объектов встроенных типов. Допустим, в классе не определены конструкторы:
struct Туре {int t; };
Тогда возможны три способа создания одиночного динамического POD-объекта:
Type *pl = new Туре: // по умолчанию
Туре *р2 = new Туре(): // по умолчанию - инициализация нулем
Туре *рЗ = new Туре (*р2); // копирование
Если вы не знаете что выбрать из телефонов, тогда посмотрите статью про HTC One Max против Samsung Galaxy Note 3
В первом случае работает конструктор без аргументов, создаваемый по умолчанию; второй вариант тоже сопровождается вызовом конструктора без аргументов, однако дополнительно выполняется инициализация нулем; в третьем варианте вызывается автоматически создаваемый конструктор копирования.
Опубликовал Kest
October 07 2013 15:10:53 ·
0 Комментариев ·
3445 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.