C++
-для чего нужен виртуальный деструктор
Если в базовом классе деструктор объявлен со словом virtual, то при удалении переменной – указателя на базовый класс, которая реально указывает на экземпляр производного класса, будет вызван деструктор производного класса.
-чем отличается вызов виртуального деструктора от обычной виртуальной
функции
Вызов деструктора происходит неявно, при выполнении оператора delete.
Ответ неполный?
-чем отличаются const char* ptr и char const *ptr
В данном случае – ничем. Это объявление указателя на константу. А если записать так:
char * const ptr , то получим объявление константного указателя на тип char.
-чем чреват выброс исключения из конструктора, деструктора
Если исключение произошло в конструкторе, то объект будет не до конца проинициализирован. Будут вызваны деструкторы полей и базовых классов, которые
проинициализированы полностью. Может быть утечка ресурсов, если они были выделены при неоконченной инициализации какого-либо класса.
При выбрасывании исключения в деструкторе часть полей и базовых классов может быть не разрушена, что приведет к возможной утечке ресурсов.
-в чем потенциальная опасность конструктора копирования по умолчанию
Конструктор копирования по умолчанию делает побитовую копию экземпляра класса. Если в классе используются указатели на какие-либо объекты, то создание копий этих объектов нужно делать самостоятельно. Иначе, при разрушении одного из экземпляров класса, может получиться так, что указатели во втором экземпляре будут указывать на
несуществующие данные.
-чем отличаются операторы приведения типа static_cast, reinterpret_cast, dynamic_cast, const_cast
static_cast — небезопасное приведение, которое происходит на этапе компиляции, проверка на совместимость типов в runtime не происходит.
reinterpret_cast – самое небезопасное преобразование типов, можно приводить любые типы к другим.
dynamic_cast – проверка на совместимость типов происходит как на стадии компиляции, так и в runtime
const_cast – снимает спецификатор «const» с объекта
-метод const. класс const. ключевое слово mutable.
Константный метод класса не может использовать неконстантные поля и методы этого класса. Константным класс объявлен не может.
mutable – нестатический и неконстантный член класса, который можно изменять в константном методе класса.
-как определить чисто виртуальную функцию, абстрактный базовый класс
Чисто виртуальная функция объявляется при помощи символов “=0” в конце объявления. Абстрактный базовый класс объявляется при помощи слова «virtual» в списке наследования.
-как организовать освобождение ресурсов при выходе из функции/метода
При помощи умных указателей. В стандартной библиотеке имеется auto_ptr.
-как запретить создание объектов в куче
Нужно сделать конструктор объекта приватным, а экземпляры создавать при помощи статической функции или специальной фабрики классов.
-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete
При помощи умных указателей. В стандартной библиотеке имеется auto_ptr.
Также при помощи специализированных медикаментов по рецепту врача.
-как запретить удаление объекта класса
Не давать наружу переменные, указатели и ссылки на объекты этого класса. Использовать функции обертки над методами класса.
-как запретить наследование от данного класса
Не делать деструктор виртуальным
-что такое виртуальный базовый класс (виртуальное наследование)
Класс , который перечислен в списке наследования при помощи слова virtual. Для любого объекта производного класса всегда создается только одна копия такого базового класса.
-что такое частичная специализация шаблона
Задание некоторых ( но не всех ) параметров шаблона для объявления нового типа или переменных нового типа.
-для чего нужен виртуальный конструктор
Под виртуальным конструктором обычно понимают шаблон проектирования – фабрику классов. Служит для создания объектов различных классов в зависимости от входных данных.
-как удалить массив объектов
При помощи оператора delete[]
-в каких случаях вызывается конструктор копирования
-что такое конструктор конверсии. ключевое слово explicit.
Конструктор конверсии служит для создания экземпляра класса по параметру переданному в конструктор. Служит для неявных преобразований при вызове функций.
Слово explicit запрещает неявное создание экземпляров класса.
-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора
Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.
-когда класс должен иметь конструктор по умолчанию
Когда этот класс используется в качестве «содержимого» в контейнерах.
Ответ не полный?
-когда можно вернуть из функции ссылку на локальный объект
Если он объявлен как статический ( static ).
-почему в C++ нельзя реализовать автоматическую сборку мусора?
Потому что, про объекты созданные на куче нельзя точно сказать вышли ли они за какие-либо пределы видимости или нет, то есть определить время их уничтожения точно нельзя. Вместо этого рекомендуется использовать умные указатели.