Re: Ответы для С++ от фонаря.
От: mopnex Россия  
Дата: 18.11.04 13:32
Оценка: 5 (2)
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++ нельзя реализовать автоматическую сборку мусора?

Потому что, про объекты созданные на куче нельзя точно сказать вышли ли они за какие-либо пределы видимости или нет, то есть определить время их уничтожения точно нельзя. Вместо этого рекомендуется использовать умные указатели.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.