Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 12:16
Оценка: 252 (39)
или коллекция вопросов на собеседовании которую я тщательно
собирал. некоторые вопросы реально задавались, некоторые описаны
из рассказов коллег.

C++
-для чего нужен виртуальный деструктор
-чем отличается вызов виртуального деструктора от обычной виртуальной
функции
-чем отличаются const char* ptr и char const *ptr
-чем чреват выброс исключения из конструктора, деструктора
-в чем потенциальная опасность конструктора копирования по умолчанию
-чем отличаются операторы приведения типа static_cast, reinterpret_cast, dynamic_cast, const_cast
-метод const. класс const. ключевое слово mutable.
-как определить чисто виртуальную функцию, абстрактный базовый класс
-как организовать освобождение ресурсов при выходе из функции/метода
-как запретить создание объектов в куче
-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete
-как запретить удаление объекта класса
-как запретить наследование от данного класса
-что такое виртуальный базовый класс (виртуальное наследование)
-что такое частичная специализация шаблона
-для чего нужен виртуальный конструктор
-как удалить массив объектов
-в каких случаях вызывается конструктор копирования
-что такое конструктор конверсии. ключевое слово explicit.
-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора
-когда класс должен иметь конструктор по умолчанию
-когда можно вернуть из функции ссылку на локальный объект
-почему в C++ нельзя реализовать автоматическую сборку мусора?

STL
-Как выбрать подходящий для задачи STL-контейнер
-Что такое функтор. Что такое алгоритм
-Какие есть способы поиска в контейнерах
-В чем разница между stack, queue и другими контейнерами
-Что такое распределители (allocators)

COM и ATL
-Что такое апартамент. В чем разница между однопоточным и многопоточным апартаментом.
-Что такое суррогатный процесс
-Как передать указатель на интерфейс из одного потока в другой в STA
-Виды маршалинга , их достоинства и недостатки
-Какие есть способы передачи массива структур в COM-сервер.
-Передача блоков данных переменной длины.
-Кто должен распределять и освобождать память при передаче строк BSTR
-Как получить на клиенте данные из буфера, распределенного в COM-сервере
-Как в ATL создать многопоточный объект (MTA)
-Какой интерфейс в ATL используется для передачи клиенту информации об ошибках?
-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


Win32
-Как распределяется доступная процессу память
-Чем отличается семафор от мьютекса
-Какие средства межпроцессной коммуникации вы знаете, их достоинства и недостатки?
-Как создать единственный экземпляр приложения в памяти (singleton)
-Как происходит создание отображаемого в память файла
-Как передать процессу указатель на память распределенную в другом
процессе
-Как сигнализировать другому потоку о его завершении и как дождаться его завершения из вызывающего потока

Объектно-ориентированное проектирование
-Что такое полиморфизм
-Что такое is-a и has-a отношения
-Знакомы ли вам паттерны проектирования

Базы данных
-что такое нормализация
-свойства 3-й нормальной формы
-достоинства и недостатки нормализации
-что такое ссылочная целостность
-что такое первичный ключ, внешний ключ
-в чем достоинства и недостатки использования триггеров
-что такое транзакция. виды изоляции транзакций
-разрешение конфликтов при одновременном изменении данных
Re[5]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 26.11.02 14:19
Оценка: 73 (11)
А вот еще список вопросов. Некоторые из них провокационные


Объясните разницу между понятиями виртуальная функция и виртуальное наследование .
Объясните, чем отличаются глобальные статические функции от статических функций, членов классов.
Что общего, и чем обычно отличаются реализации конструкторов копирования, инициализации и перегруженной операции присваивания?
Сравните 2 способа перегрузки операций: как метод класса и как внешнюю функцию-друг .
Как создать в классе виртуальные конструкторы и деструктор?
Может ли шаблонный (темплэйтный) класс быть абстрактным? Почему?
В чем специфика перегрузки операций "sizeof", "typeid", "new" и "delete"? Чем она вызвана?
Сравните особенности перегрузки операций "()" и "[]".
Дайте развернутое сравнение работы со строками в стиле С (char*) и С++ (string).
Дайте развернутое сравнение работы с динамической памятью в С и С++.
Дайте развернутое сравнение стандартных средств ввода-вывода в С и С++.
Что означает оператор throw без параметра?
Расскажите, какие бывают итераторы и чем они отличаются.
В чем различие между модификаторами register, const и volatile?
Как написать функцию, принимающую заранее неизвестное число аргументов?
В чем разница между конструкциями "extern" и "extern "C""?
В чем, в рамках традиционного С++, различие между using и include?
Сравните использование макросов, inline-функций и template-функций.
Как грамотно организовать нетривиальную сортировку средствами стандартных библиотек С и С++ (сравните подходы)?
Расскажите, что и как нужно сделать, что бы объекты написанного Вами класса можно было помещать в cout и читать из cin?
Сравните различные формы операций приведения типа (в стиле С и в стиле С++). Расскажите о перегрузке этих операций.
У каждого класса есть некоторые особые функции-члены, вызовы которых могут вставляться компилятором в код без явного на то указания программиста. Перечислите такие функции, члены и случаи, когда могут возникать неявные вызовы.
Как задать значения аргументов функций по умолчанию? Каковы плюсы и минусы использования этой возможности С++? Каковы ее альтернативы?
При написании оператора catch мы можем в качестве типа его аргумента написать непосредственно тип исключения, указатель на тип исключения либо ссылку на тип исключения. Сравните эти подходы.
В каком порядке вычисляются аргументы функции при ее вызове: слева направо, справа налево или еще как-нибудь? Например, в каком порядке будут вычислены аргументы в следующем примере: f(5+I, ++I); ?
Если при создании переменной программист ее явно не инициализировал, то, в некоторых случаях, компилятор сам даст ей некое, заранее известное начальное значение, а в некоторых случаях начальное значение будет непредсказуемо. От чего это зависит?
От чего зависит порядок создания (последовательность вызова конструкторов) глобальных переменных? Какие практические выводы из этого следуют?
Есть код:
f(){return 3.5;}
...
double d = f()
Чему равно значение d ? Почему?
Объясните разницу между понятиями "анонимное пространство имен" и "анонимное перечисление".
Что произойдет, если исключение будет выброшено изнутри конструктора?
Что из себя представляет и для чего применяется специализация шаблонов?
В чем специфика применения операции delete к указателям на функции?
Что такое и как используется this ?
Для чего применяется предварительное объявление (forward declaration) классов?
Какие директивы препроцессора обычно используются для предотвращения повторного включения заголовочного файла?
Какие конструкции для организации ветвления предоставляет программистам С++?
Какие конструкции для организации циклов предоставляет программистам С++?
Что такое полиморфизм? Наличие какие конструкций в С++ позволяет утверждать, что этот язык поддерживает полиморфизм? Для чего используется полиморфизм?
Что такое lvalue ?
Для чего в C++ используется ключевое слово finaly ?
Сравните операторы continue и break.
Что такое и для чего нужны триграфы?
В чем отличие и что общее в специфике перегрузки конструкторов и деструкторов?
Что такое и как используется анонимное объединение?
Можно ли в С++ (если да — то как) написать такой класс, от которого нельзя пронаследовать в дальнейшем никакой другой класс?
Даны два класса, один из которых является наследником от второго. Напишите, как должны выглядеть конструкторы копирования-инициализации для этих классов (составьте пример).
В чем специфика операций || и && ? В чем специфика перегрузки этих операций?
Сравните понятия "статическая переменная" и "статическая переменная — член класса".
В чем опасность использования макросов? Приведите примеры.
Сравните операторы throw и return.
Как инициализировать переменную, являющуюся приватным статическим членом класса?
Для чего нужен и как используется класс auto_ptr ?
Re[2]: Ответы для С++ от фонаря.
От: Alexey_VL  
Дата: 21.11.04 01:42
Оценка: :)))
Здравствуйте, mopnex, Вы писали:

M>const_cast – снимает спецификатор «const» с объекта


Еще "volatile" тоже снимает.



Здравствуйте, Awaken, Вы писали:

>Кстати добрая половина ответов на вопросы по C++ содержится в книгах Мейерса и Страуструпа


Блин, хорошо что Страуструп этого не видит. Получить по С++ 50% да еще на двоих с Мейерсом...
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Re[3]: Для чего нужен виртуальный конструктор?
От: NikeByNike Россия  
Дата: 25.05.09 01:55
Оценка: +1 :))
Здравствуйте, BulatZiganshin, Вы писали:

DIM>>Здравствуйте, Awaken, Вы писали:


BZ>вы обвиняетесь в эксгумации трупа C++


Ты таки любишь закрывать глаза на объективную реальность
Нужно разобрать угил.
Re[4]: Для чего нужен виртуальный конструктор?
От: vav Россия  
Дата: 16.12.02 11:52
Оценка: 21 (2)
IT>>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?

натолкнулся тут.. http://www.moskalyuk.com/jobs/
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++ нельзя реализовать автоматическую сборку мусора?

Потому что, про объекты созданные на куче нельзя точно сказать вышли ли они за какие-либо пределы видимости или нет, то есть определить время их уничтожения точно нельзя. Вместо этого рекомендуется использовать умные указатели.
Re[3]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 13:19
Оценка: -2
Здравствуйте, Igor Soukhov, Вы писали:

хъ

IS>поищи в с++ форуме — вопрос достаточно избитый.


1. Нельзя искать по форумам
2. В природе (по крайней мере в С++) такого понятия нет
3. Поиск это подтвердил. И так как уважаемый Awaken упомянул о нем в C++ разделе, а не в проектировании, например, можно сказать, что он лоханулся.
Re[5]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 26.11.02 14:52
Оценка: 12 (1)
Здравствуйте, Awaken

Слушай, а ты за что мне ноль отвалил?
Чем тебе вопросы неугодили?
Ты же с этими вопросами уже второй месяц носишся.
Re: Для чего нужен виртуальный конструктор?
От: Spidola Россия http://www.usametrics.ru
Дата: 18.11.04 19:23
Оценка: 6 (1)
Здравствуйте, Awaken, Вы писали:

[SKIPPED]

Чем-то напоминает список вопросов к экзаменам ГАИ. Но всё равно, если правила выучил, а водить не умеешь, лучше шофёром не наниматься
А автору спасибо. Будем знать, какие вопросы нужно перефразировать на собеседовании
... << RSDN@Home 1.1.4 @@subversion >>
Re: Для чего нужен виртуальный конструктор?
От: Sergey S. Беларусь  
Дата: 26.11.02 12:41
Оценка: 3 (1)
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

Это, конечно — !

зы: как приложение, хотелось бы посмотреть коллекцию ответов на коллекцию вопросов (проверить себя, узнать что-то новое и тэдэ)
Re[3]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 13:57
Оценка: :)
Здравствуйте, Awaken, Вы писали:

хъ

A>ИМХО разные.


A>Ответ на первый вопрос: использовать идиому «захват ресурсов при инициализации»


A>Ответ на второй: рассказать про умные указатели, вскользь упомянув про

A>паттерн Прокси чтоб показать какой ты умный

Техника "выделение ресурся есть инициализация" реализуется с помощью всевозможных враперов или умных указателей.

A>>-как запретить удаление объекта класса


>>Не понял! Что, создать можно а удалить нельзя?


A>Имеется в виду – запретить пользоваться Delete.


Оператором delete ты хочешь сказать? (Вижу что хочешь! )

хъ

A>Вопрос часто встречается на интервью по C++. Это просто подколка.

A>На самом деле есть такой паттерн, но к C++ не имеет отношение

А зачем его в С++ тогда ты засунул?

A>>-когда класс должен иметь конструктор по умолчанию


>>Вопрос не корректный, ИМХО.


A>При создании массива объектов класс должен иметь конструктор

A>по умолчанию

Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.

хъ

A>Реализовать то можно но нет гарантии что программист не нарушит этот механизм. Правильный ответ – из-за наличия арифметических операций над

A>указателями сборщик мусора не сможет узнать есть ли еще ссылки на объект или нет

А мы запретим арифметические операции над указателями!

хъ

A>Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме

A>Остальное резервируется под ядро и совместимость с 16-бит. приложениями

Вопрос должен звучать так: Какова архитектура виртуальной памяти под виндами и структура виртуального адресного пространства процесса.

A>>-Как создать единственный экземпляр приложения в памяти (singleton)


хъ
Re[4]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:08
Оценка: :)
А>Техника "выделение ресурся есть инициализация" реализуется с помощью всевозможных враперов или умных указателей.

в общем да, но вопроса было именно два. в течение одного собеседования

А>Оператором delete ты хочешь сказать? (Вижу что хочешь! )


вот ты и сам понял

А>А зачем его в С++ тогда ты засунул?


спрашивают его именно по C++

A>>При создании массива объектов класс должен иметь конструктор


А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна >инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.


вероятно потому что map внутри использует массив.


А>А мы запретим арифметические операции над указателями!


вот в C# их поэтому и запретили

А>Вопрос должен звучать так: Какова архитектура виртуальной памяти под виндами и структура виртуального адресного >пространства процесса.


ты бы с легкостью прошел это интервью
Re[5]: Для чего нужен виртуальный конструктор?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.04 15:22
Оценка: :)
Здравствуйте, IT, Вы писали:

IT>Речь не о сертификации, а о справочнике вопросов и ответов для интервью.


Тогда можно интервью не проводить — достаточно спросить у чувака знает ли он про rsdn.ru
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
AVK Blog
Re: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 26.11.02 12:54
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

A>-как организовать освобождение ресурсов при выходе из функции/метода

A>-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete

ИМХО, два одинаковы вопроса

A>-как запретить удаление объекта класса


Не понял! Что, создать можно а удалить нельзя?

A>-для чего нужен виртуальный конструктор


Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду

A>-когда класс должен иметь конструктор по умолчанию


Вопрос не корректный, ИМХО.

A>-почему в C++ нельзя реализовать автоматическую сборку мусора?


Можно.

A>COM и ATL

A>-Как передать указатель на интерфейс из одного потока в другой в STA

Вопрос не корректный.

A>-Какие есть способы передачи массива структур в COM-сервер.


А почуму именно в, а не из?

A>-Как в ATL создать многопоточный объект (MTA)


Может как написать кокласс, поддерживающий многопоточность?

A>-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


callback и events — разные вещи. Уточни.

A>

A>Win32
A>-Как распределяется доступная процессу память

Вопрос не корректный.

A>-Как создать единственный экземпляр приложения в памяти (singleton)


В памяти?
Re[2]: Для чего нужен виртуальный конструктор?
От: Igor Soukhov  
Дата: 26.11.02 13:06
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>-для чего нужен виртуальный конструктор

А>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду

поищи в с++ форуме — вопрос достаточно избитый.
* thriving in a production environment *
Re: Для чего нужен виртуальный конструктор?
От: Mink Россия  
Дата: 26.11.02 13:18
Оценка:
Здравствуйте, Awaken, Вы писали:


A>C++

A>-чем отличаются const char* ptr и char const *ptr

Ответ: ничем.

Может имелось в виду const char* ptr и char* const ptr?
Сила, она в ньютонах
Re[2]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 13:46
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно

A>собирал. некоторые вопросы реально задавались, некоторые описаны
A>из рассказов коллег.

A>-как организовать освобождение ресурсов при выходе из функции/метода

A>-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete

>ИМХО, два одинаковы вопроса


ИМХО разные.

Ответ на первый вопрос: использовать идиому «захват ресурсов при инициализации»

Ответ на второй: рассказать про умные указатели, вскользь упомянув про
паттерн Прокси чтоб показать какой ты умный

A>-как запретить удаление объекта класса


>Не понял! Что, создать можно а удалить нельзя?


Имеется в виду – запретить пользоваться Delete.

A>-для чего нужен виртуальный конструктор


>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в >виду


Вопрос часто встречается на интервью по C++. Это просто подколка.
На самом деле есть такой паттерн, но к C++ не имеет отношение

A>-когда класс должен иметь конструктор по умолчанию


>Вопрос не корректный, ИМХО.


При создании массива объектов класс должен иметь конструктор
по умолчанию

A>-почему в C++ нельзя реализовать автоматическую сборку мусора?


>Можно.

.
Реализовать то можно но нет гарантии что программист не нарушит этот механизм. Правильный ответ – из-за наличия арифметических операций над
указателями сборщик мусора не сможет узнать есть ли еще ссылки на объект или нет

A>COM и ATL

A>-Как передать указатель на интерфейс из одного потока в другой в STA

>Вопрос не корректный.


Тут надо рассказать про функции CoInterThreadMarshalInterfaceInStream и
CoGetInterfaceAndReleaseStream, не запутавшись в названиях

A>-Какие есть способы передачи массива структур в COM-сервер.


>А почуму именно в, а не из?


Имеется в виду описание структур в IDL и как ее засунуть в VARIANT

A>-Как в ATL создать многопоточный объект (MTA)


>Может как написать кокласс, поддерживающий многопоточность?


A>-Как организовать передачу callback-вызовов от COM-сервера к клиенту ?


>callback и events — разные вещи. Уточни.


Рассказать о IConnectionPoint, Advise, etc

A>

A>Win32
A>-Как распределяется доступная процессу память

>Вопрос не корректный.


Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме
Остальное резервируется под ядро и совместимость с 16-бит. приложениями

A>-Как создать единственный экземпляр приложения в памяти (singleton)


>В памяти?


Речь о том чтобы только можно было запустить только одну копию программы
Один из вариантов – использовать именованный объект ядра (например мьютекс)
Re[2]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 13:47
Оценка:
M>Может имелось в виду const char* ptr и char* const ptr?

да. это опечатка.
Re[4]: Для чего нужен виртуальный конструктор?
От: Mink Россия  
Дата: 26.11.02 14:08
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>>-когда класс должен иметь конструктор по умолчанию


>>>Вопрос не корректный, ИМХО.


A>>При создании массива объектов класс должен иметь конструктор

A>>по умолчанию

А>Не только при в этом случае. Конструктор по умолчанию должен быть для тех объектов, для которых нужна инициализация по умолчанию. Например, класс без ctor по умолчанию нельзя использовать в std::map.


Как пишет Элджер: "Чем дольше я имею дело с С++, тем чаще мне кажется, что нарушение этих требований [наличие конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует наказывать парой лет каторжного программирования на BASIC."
Сила, она в ньютонах
Re[5]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:16
Оценка:
>конструктора по умолчанию и рабочего оператора = ] — проявление злостного непрофессионализма, за которое следует >наказывать парой лет каторжного программирования на BASIC."

уж лучше на языке 1С
Re[3]: Для чего нужен виртуальный конструктор?
От: vasketsov Россия http://ntprog.by.ru
Дата: 26.11.02 14:18
Оценка:
Здравствуйте, Awaken, Вы писали:

A>>Win32

A>>-Как распределяется доступная процессу память

>>Вопрос не корректный.

Действительно, он настолько всеобъемлющ, что на основании только одного этого вопроса можно либо сразу послать, либо сразу принять, к тому же в разных системах это по разному, если в тонкости лезть.

A>Меня два раза его спрашивали. Ответ – 2Gb в пользовательском режиме

A>Остальное резервируется под ядро и совместимость с 16-бит. приложениями

Это так распределяется доступная процессу память ?
Ничего не скажешь, крутая 9x-овая трава!!!

Для NT- даже если ничего не сказать про то что в первой "половине" (2GB или 3GB, если boot.ini поправить) как устроено, в "той" части все четко и прозрачно описано где что находится, и "та" память также доступна процессу (контекст "вызвавшего потока" — один из полноправных контекстов при выполнении кода в режиме ядра). Прямо недоступно только то, что вызывается из System Working Threads (это другой поток, в контексте System), но все равно можно прочитать и оттуда при желании. Вот уж что совсем не доступно — так это специально созданные условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же 0xFFFF вниз от верхней границы UserMode).
Васкецов Сергей
http://registry.km.ru
Re[4]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 26.11.02 14:22
Оценка:
>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).

а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?
Re[5]: Для чего нужен виртуальный конструктор?
От: vasketsov Россия http://ntprog.by.ru
Дата: 26.11.02 16:42
Оценка:
Здравствуйте, Awaken, Вы писали:

>>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).


A>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?


Та же причина: "сторожевая" область, тоже искуственно введена для упрощения отслеживания ошибок.
Васкецов Сергей
http://registry.km.ru
Re[2]: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 26.11.02 18:14
Оценка:
Здравствуйте, Алекс, Вы писали:

A>>или коллекция вопросов на собеседовании которую я тщательно


А>Вопрос не корректный.


Дело не в корректный или некорректный. Дело в том, что эти вопросы задают. Меня как-то один клоун вполне серьёзно спрашивал что такое виртуальный конструктор. Я его переспросил может быть деструктор? Но похоже для него разницы особой не было, но интервью я тогда не прошёл

Вообще, во многих случаях интервьюирующим (особенно если это рекрутер или менеджер) нужно получить простой ответ, чем проще тем лучше, а не рассуждения на тему с примерами и выкладками. Нужно просто назвать несколько ключевых слов, которые есть в их списке

С другой стороны, такой вариает не проходит, если "следствие ведут знатоки". Тут лучше лезть в дебри чем дальше, тем лучше.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 26.11.02 18:24
Оценка:
Здравствуйте, Awaken, Вы писали:

A>или коллекция вопросов на собеседовании которую я тщательно собирал. некоторые вопросы реально задавались, некоторые описаны из рассказов коллег.


Я вот тут тоже пытался изобразить что-то год назад, но воз пока и ныне там.
http://www.rsdn.ru/?article/interview/?cpp.xml

Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?
Если нам не помогут, то мы тоже никого не пощадим.
Re: Для чего нужен виртуальный конструктор?
От: Gosha Украина  
Дата: 26.11.02 21:20
Оценка:
Здравствуйте, Awaken, Вы писали:

...
Круто!
Взялся бы еще кто-нибудь из Зубров поотвечать на них, подробненько так, с предисторией... Такому человеку не грех и баллами скинуться всем форумом на первое место в топе Хотя, они и так там сидят . А вот другим почитать (и мне в том числе) было бы интересно/поучительно.
Re[2]: Для чего нужен виртуальный конструктор?
От: vav Россия  
Дата: 27.11.02 04:14
Оценка:
G>Взялся бы еще кто-нибудь из Зубров поотвечать на них, подробненько так, с предисторией...
G>А вот другим почитать (и мне в том числе) было бы интересно/поучительно.

А еще лучше сесть за MSDN и самому со всем этим разобраться. А в форуме спросить: "я правильно понимаю, что..."
Re[6]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 27.11.02 04:15
Оценка:
Здравствуйте, Dima2, Вы писали:

D>А вот еще список вопросов. Некоторые из них провокационные


[]

D>В чем специфика применения операции delete к указателям на функции?


Вот это я не понял?
Re[2]: Для чего нужен виртуальный конструктор?
От: Dr_Sh0ck Беларусь  
Дата: 27.11.02 05:36
Оценка:
Здравствуйте, IT, Вы писали:

IT>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


Хорошая идея
Do not fake yourself ;)
ICQ#: 198114726
Re[3]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 27.11.02 07:57
Оценка:
Здравствуйте, Dr_Sh0ck, Вы писали:

DS>Здравствуйте, IT, Вы писали:


IT>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


DS> Хорошая идея


Ну куда-то делся Mishka.NET, он же ваял сертификацию.
Re[7]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 27.11.02 08:04
Оценка:
Здравствуйте, Алекс, Вы писали:

D>>В чем специфика применения операции delete к указателям на функции?


А>Вот это я не понял?


Надо полагать, что это вопрос из серии — "расшатать чуткую нервную систему собеседуемого". Раз есть указатель значит его можно delete
Re[7]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 27.11.02 08:12
Оценка:
Здравствуйте, Алекс, Вы писали:

А>Здравствуйте, Dima2, Вы писали:


D>>А вот еще список вопросов. Некоторые из них провокационные


А>[]


D>>В чем специфика применения операции delete к указателям на функции?


А>Вот это я не понял?



А вот если так


int func(double) { return 10; }

int main(int argc, char* argv[])
{
    typedef int (*pffunc) (double);
    pffunc* pf = new pffunc(0);
    *pf = &func;
    int k = (*pf)( 1.2 );
    delete pf;

    return 0;
}
Re[2]: Для чего нужен виртуальный конструктор?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 27.11.02 08:31
Оценка:
Здравствуйте, Алекс, Вы писали:

А>Здравствуйте, Awaken, Вы писали:


A>>или коллекция вопросов на собеседовании которую я тщательно

A>>собирал. некоторые вопросы реально задавались, некоторые описаны
A>>из рассказов коллег.

A>>-как организовать освобождение ресурсов при выходе из функции/метода

A>>-как предотвратить утечки памяти связанные с с забывчивостью вызывать Delete

А>ИМХО, два одинаковы вопроса


На первый надо ответить: возвращать smart pointer,
а на второй: по рукам бить

A>>-как запретить удаление объекта класса

А>Не понял! Что, создать можно а удалить нельзя?

Можно но не всем.

A>>-для чего нужен виртуальный конструктор

А>Я серьезно, может объяснишь, что-то я не очень врубаюсь что ты имеешь в виду

Для того чтобы создать класс тип которого ты точно не знаешь.
В некоторый языках он есть в прямой форме, а в C++
это название одного из производящих паттернов.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[8]: Для чего нужен виртуальный конструктор?
От: Алекс Россия http://wise-orm.com
Дата: 27.11.02 08:32
Оценка:
Здравствуйте, Dima2, Вы писали:

хъ

D>
D>int func(double) { return 10; }

D>int main(int argc, char* argv[])
D>{
D>    typedef int (*pffunc) (double);
D>    pffunc* pf = new pffunc(0);
D>    *pf = &func;
D>    int k = (*pf)( 1.2 );
D>    delete pf;

D>    return 0;
D>}
D>


Дык у тебя указатель на указатель на функцию! Подобный код и в страшном сне не приснится!
А что есть ноль в new pffunc(0)?
Re[9]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 27.11.02 08:35
Оценка:
Здравствуйте, Алекс, Вы писали:

A>Подобный код и в страшном сне не приснится!

Но его можно привести на собеседовании, и сказать что это страшный сон и объяснить почему.

А>А что есть ноль в new pffunc(0)?

Инициализация указателя нулем. Макрос NULL не работал.
Re[6]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 27.11.02 08:59
Оценка:
Здравствуйте, Dima2, Вы писали:

D>Здравствуйте, Awaken


D>Слушай, а ты за что мне ноль отвалил?

D>Чем тебе вопросы неугодили?
D>Ты же с этими вопросами уже второй месяц носишся.

Прошу прощения, хотел ведь все наоборот!
нажал не то случайно
Re[8]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 27.11.02 09:03
Оценка:
Здравствуйте, Dima2, Вы писали:

D>Здравствуйте, Алекс, Вы писали:


D>>>В чем специфика применения операции delete к указателям на функции?


А>>Вот это я не понял?


D>Надо полагать, что это вопрос из серии — "расшатать чуткую нервную систему собеседуемого". Раз есть указатель значит его можно delete


если это и скопмилируется то в рантайме должно грохнуться
Re[4]: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 27.11.02 16:03
Оценка:
Здравствуйте, Dima2, Вы писали:

IT>>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


DS>> Хорошая идея


D>Ну куда-то делся Mishka.NET, он же ваял сертификацию.


Речь не о сертификации, а о справочнике вопросов и ответов для интервью.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Для чего нужен виртуальный конструктор?
От: Dima2  
Дата: 28.11.02 08:17
Оценка:
Здравствуйте, IT, Вы писали:

D>>Ну куда-то делся Mishka.NET, он же ваял сертификацию.


IT>Речь не о сертификации, а о справочнике вопросов и ответов для интервью.


О, это дорогого стоит.
Просто здесь все ленивые , вопросов накидать, то можно сколько угодно, а вот кто возьмется грамотно и кратко ответить
Re[6]: Для чего нужен виртуальный конструктор?
От: Igor Soukhov  
Дата: 28.11.02 11:53
Оценка:
Здравствуйте, Dima2, Вы писали:

D>О, это дорогого стоит.

D>Просто здесь все ленивые , вопросов накидать, то можно сколько угодно, а вот кто возьмется грамотно и кратко ответить

а нафиг все эти вопросы-ответы ?
* thriving in a production environment *
Re[7]: Для чего нужен виртуальный конструктор?
От: vasketsov Россия http://ntprog.by.ru
Дата: 28.11.02 13:31
Оценка:
А чего вы так все на вирт. конструктор взъелись?
Исходники VCL давно глядели?
Васкецов Сергей
http://registry.km.ru
Re[3]: Для чего нужен виртуальный конструктор?
От: The Lex Украина  
Дата: 03.12.02 13:10
Оценка:
Здравствуйте, Awaken, Вы писали:

A>>-Какие есть способы передачи массива структур в COM-сервер.


>>А почуму именно в, а не из?


A>Имеется в виду описание структур в IDL и как ее засунуть в VARIANT


А при чем тут VARIANT к структурам?

A>>-Как создать единственный экземпляр приложения в памяти (singleton)


>>В памяти?


A>Речь о том чтобы только можно было запустить только одну копию программы

A>Один из вариантов – использовать именованный объект ядра (например мьютекс)

Хм, насколько я понимаю, термин singleton обозначает, что все обращения к приложению будут направлены одному и тому же, единственному экземпляру этого приложения, а не запрет на запуск нескольких приложений. Разве это не так?
Голь на выдумку хитра, однако...
Re[2]: Для чего нужен виртуальный конструктор?
От: The Lex Украина  
Дата: 03.12.02 13:17
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Awaken, Вы писали:


A>>или коллекция вопросов на собеседовании которую я тщательно собирал. некоторые вопросы реально задавались, некоторые описаны из рассказов коллег.


IT>Я вот тут тоже пытался изобразить что-то год назад, но воз пока и ныне там.

IT>http://www.rsdn.ru/?article/interview/?cpp.xml

IT>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


Несомненно стоит! И рекрутерам этот раздел был бы довольно полезен...
Голь на выдумку хитра, однако...
Re[3]: Для чего нужен виртуальный конструктор?
От: IT Россия linq2db.com
Дата: 03.12.02 15:00
Оценка:
Здравствуйте, The Lex, Вы писали:

IT>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


TL>Несомненно стоит! И рекрутерам этот раздел был бы довольно полезен...


Ну тогда давайте дружно попросим Awaken'а заняться этим делом когда он найдёт работу
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Для чего нужен виртуальный конструктор?
От: Снорк  
Дата: 09.12.02 09:59
Оценка:
Здравствуйте, Алекс, Вы писали:

D>>В чем специфика применения операции delete к указателям на функции?

А>Вот это я не понял?

Всю жизнь мечтал, пока работал с dll hell. (Сейчас уже всё равно, после КОМа и НЕТа). Чтобы код был красивым, описываем обычную функцию, грохаем её по указателю, подменяем на свою (из GetProcAddress()) и юзаем без этих страшных разыменований.

Если бы мне на собеседовании задали подобный вопрос, я бы высказался примерно так:
"Господа, я согласен остаться без работы, если вы мне скажете, каким грязным приёмом вам удалось заставить это работать".
Re[5]: Для чего нужен виртуальный конструктор?
От: co  
Дата: 18.11.04 08:40
Оценка:
Здравствуйте, vav, Вы писали:

IT>>>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


vav>натолкнулся тут.. http://www.moskalyuk.com/jobs/


Это оттуда.

void send (int *to, int * from, int count)
{
int n = (count + 7) / 8;
switch ( count % 8)
{
case 0: do { *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while ( --n > 0 );
}
}

Вроде просто копирование из from в to , но зачем так ?
Re[6]: Для чего нужен виртуальный конструктор?
От: korzhik Россия  
Дата: 18.11.04 08:50
Оценка:
Здравствуйте, co, Вы писали:


co>void send (int *to, int * from, int count)

co>{
co> int n = (count + 7) / 8;
co> switch ( count % 8)
co> {
co> case 0: do { *to++ = *from++;
co> case 7: *to++ = *from++;
co> case 6: *to++ = *from++;
co> case 5: *to++ = *from++;
co> case 4: *to++ = *from++;
co> case 3: *to++ = *from++;
co> case 2: *to++ = *from++;
co> case 1: *to++ = *from++;
co> } while ( --n > 0 );
co> }
co>}

co>Вроде просто копирование из from в to , но зачем так ?


google + Duff's device

Считаю этот вопрос плохим для интервью.
Этот вопрос больше на кругозор, чем на знание C.
Даже если человек хорошо знает C, но первый раз видит этот приём,
думаю он будет некоторое время в замешательстве.
При нынешнем развитии компиляторов востребованность Duff's device спорна.
Re[6]: Для чего нужен виртуальный конструктор?
От: LaptevVV Россия  
Дата: 18.11.04 09:05
Оценка:
Здравствуйте, co, Вы писали:

co>Здравствуйте, vav, Вы писали:


IT>>>>>Может стоит организовать раздел на RSDN, посвящённый подобным вопросам?


vav>>натолкнулся тут.. http://www.moskalyuk.com/jobs/


co>Это оттуда.


co>void send (int *to, int * from, int count)

co>{
co> int n = (count + 7) / 8;
co> switch ( count % 8)
co> {
co> case 0: do { *to++ = *from++;
co> case 7: *to++ = *from++;
co> case 6: *to++ = *from++;
co> case 5: *to++ = *from++;
co> case 4: *to++ = *from++;
co> case 3: *to++ = *from++;
co> case 2: *to++ = *from++;
co> case 1: *to++ = *from++;
co> } while ( --n > 0 );
co> }
co>}

co>Вроде просто копирование из from в to , но зачем так ?

Это из Страуструпа — развертка цикла — чтоб быстрей работал (меньше итераций в 8 раз).
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Ответы для С++ от фонаря.
От: AndrewJD США  
Дата: 18.11.04 16:33
Оценка:
Здравствуйте, mopnex, Вы писали:

M>Чисто виртуальная функция объявляется при помощи символов “=0” в конце объявления. Абстрактный базовый класс объявляется при помощи слова «virtual» в списке наследования.

Уверен?


M>-как запретить наследование от данного класса

M>Не делать деструктор виртуальным
И что будет?


M>-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора

M>Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.
Про ссылки забыл
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Для чего нужен виртуальный конструктор?
От: Awaken Украина  
Дата: 19.11.04 11:23
Оценка:
Здравствуйте, Spidola, Вы писали:

S>Здравствуйте, Awaken, Вы писали:


S>[SKIPPED]


S>Чем-то напоминает список вопросов к экзаменам ГАИ. Но всё равно, если правила выучил, а водить не умеешь, лучше шофёром не наниматься

S>А автору спасибо. Будем знать, какие вопросы нужно перефразировать на собеседовании

кстати добрая половина ответов на вопросы по C++ содержится в книгах Мейерса и Страуструпа
Re[3]: Для чего нужен виртуальный конструктор?
От: korzhik Россия  
Дата: 19.11.04 11:24
Оценка:
Здравствуйте, Awaken, Вы писали:

A>Здравствуйте, Spidola, Вы писали:


S>>Здравствуйте, Awaken, Вы писали:


S>>[SKIPPED]


S>>Чем-то напоминает список вопросов к экзаменам ГАИ. Но всё равно, если правила выучил, а водить не умеешь, лучше шофёром не наниматься

S>>А автору спасибо. Будем знать, какие вопросы нужно перефразировать на собеседовании

A>кстати добрая половина ответов на вопросы по C++ содержится в книгах Мейерса и Страуструпа


и Херба Саттера
Re[3]: Ответы для С++ от фонаря.
От: mopnex Россия  
Дата: 19.11.04 11:56
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, mopnex, Вы писали:


M>>Чисто виртуальная функция объявляется при помощи символов “=0” в конце объявления. Абстрактный базовый класс объявляется при помощи слова «virtual» в списке наследования.

AJD>Уверен?


Да, здесь ошибся... Абстрактный базовый класс — это класс, имеющий хотя бы одну чисто виртуальную функцию.

M>>-как запретить наследование от данного класса

M>>Не делать деструктор виртуальным
AJD>И что будет?

Да ничего хорошего. В голову ничего не приходит... В Java есть слово final.
А в плюсах как запретить наследование??

M>>-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора

M>>Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.
AJD>Про ссылки забыл


Ага
Re[4]: Ответы для С++ от фонаря.
От: korzhik Россия  
Дата: 19.11.04 11:59
Оценка:
Здравствуйте, mopnex, Вы писали:

M>Да ничего хорошего. В голову ничего не приходит... В Java есть слово final.

M>А в плюсах как запретить наследование??

final class
Автор: Андрей Тарасевич
Дата: 21.01.02
Re[2]: Ответы для С++ от фонаря.
От: LaptevVV Россия  
Дата: 19.11.04 12:16
Оценка:
Здравствуйте, mopnex, Вы писали:

M>-в чем потенциальная опасность конструктора копирования по умолчанию


M>Конструктор копирования по умолчанию делает побитовую копию экземпляра класса. Если в классе используются указатели на какие-либо объекты, то создание копий этих объектов нужно делать самостоятельно. Иначе, при разрушении одного из экземпляров класса, может получиться так, что указатели во втором экземпляре будут указывать на

M>несуществующие данные.
Неточно. Не побитное копирование. а поэлементное — так в стандарте написано.
M>-чем отличаются операторы приведения типа static_cast, reinterpret_cast, dynamic_cast, const_cast

M>static_cast — небезопасное приведение, которое происходит на этапе компиляции, проверка на совместимость типов в runtime не происходит.

M>reinterpret_cast – самое небезопасное преобразование типов, можно приводить любые типы к другим.
M>dynamic_cast – проверка на совместимость типов происходит как на стадии компиляции, так и в runtime
M>const_cast – снимает спецификатор «const» с объекта
Совсем неправильно.
static_cast — самое безопасное приведение, с проверкой типов на этапе компиляции.
reinterpret_cast – самое небезопасное преобразование типов, можно приводить любые типы к другим. Фактического преобразования не происходит.
M>dynamic_cast – проверка на совместимость типов происходит как на стадии компиляции, так и в runtime
Что-то я про стадию компиляции ничего не слыхал.
Выполняется только на стадии выполнения для полиморфных классов (полиморфные классы — имеющие виртуальные функции)
применяется для ссылок и указателей на объект полиморфного класса. В случае отказа при преобразовании ссылки возбуждает исключение bad_cast. При отказе для указателей возвращает NULL (0)
M>-как определить чисто виртуальную функцию, абстрактный базовый класс
M>Чисто виртуальная функция объявляется при помощи символов “=0” в конце объявления. Абстрактный базовый класс объявляется при помощи слова «virtual» в списке наследования.
Абстрактный базовый класс — имеет в составе хотя бы одну чистую виртуальную функцию. А то, что написано — это виртуальная база.
M>-как организовать освобождение ресурсов при выходе из функции/метода
M>При помощи умных указателей. В стандартной библиотеке имеется auto_ptr.
В конструкторе ресурс получать, в деструкторе — освобождать. Использование для этого auto_ptr — частный случай.
M>-как запретить создание объектов в куче
M>Нужно сделать конструктор объекта приватным, а экземпляры создавать при помощи статической функции или специальной фабрики классов.
Можно для класса перегрузить new
M>-как запретить удаление объекта класса
M>Не давать наружу переменные, указатели и ссылки на объекты этого класса. Использовать функции обертки над методами класса.
Один из вариантов — singlton Мейерса

M>-как запретить наследование от данного класса

M>Не делать деструктор виртуальным
Не, там должна быть виртуальная база. да еще друзья...

M>-что такое конструктор конверсии. ключевое слово explicit.

M>Конструктор конверсии служит для создания экземпляра класса по параметру переданному в конструктор. Служит для неявных преобразований при вызове функций.
M>Слово explicit запрещает неявное создание экземпляров класса.
Неточно. Запрещает неявное преобразование при создании.
M>-в каких случаях переменная класса должна быть проинициализирована в списке инициализации конструктора
M>Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.
Ну, использовать для этого список инициализации необязательно. А вот для инициализации константных полей класса — обязательно.
M>-когда класс должен иметь конструктор по умолчанию
M>Когда этот класс используется в качестве «содержимого» в контейнерах.
M>Ответ не полный?
Конструктор по умолчанию используется для инициализации глобальных и статических переменных.

M>-почему в C++ нельзя реализовать автоматическую сборку мусора?

M>Потому что, про объекты созданные на куче нельзя точно сказать вышли ли они за какие-либо пределы видимости или нет, то есть определить время их уничтожения точно нельзя. Вместо этого рекомендуется использовать умные указатели.
Да можно реализовать, только писать много.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Ответы для С++ от фонаря.
От: mopnex Россия  
Дата: 19.11.04 13:29
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Совсем неправильно.

LVV>static_cast — самое безопасное приведение, с проверкой типов на этапе компиляции.

Да как же оно самое безопасное-то? А если я сделаю неверный downcast?

LVV>Один из вариантов — singlton Мейерса

Можно ссылочку или если нетрудно набросок.

M>>Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.

LVV>Ну, использовать для этого список инициализации необязательно. А вот для инициализации константных полей класса — обязательно.

Как это необязательно?
class A
{
private: A(){};
public: A( int a, int b );
};

class B
{
public: A a;
};

Ну и как можно еще не используя список инициализации проинициализировать а?
Re[4]: Ответы для С++ от фонаря.
От: LaptevVV Россия  
Дата: 19.11.04 13:42
Оценка:
Здравствуйте, mopnex, Вы писали:

LVV>>Совсем неправильно.

LVV>>static_cast — самое безопасное приведение, с проверкой типов на этапе компиляции.
M>Да как же оно самое безопасное-то? А если я сделаю неверный downcast?
По сравнению с reinterpret_cast, которое даже непереносимо — самое безопасное. Поскольку проверяется на этапе компиляции. А как использовать — это уж в меру собственной испорченности
LVV>>Один из вариантов — singlton Мейерса
M>Можно ссылочку или если нетрудно набросок.
Можно найти в Александреску.
А можно прочитать вот это.

Применение статических элементов класса
Реализация паттернов программирования Singleton и Monostate основана как раз на использовании статических полей и методов. Паттерн Singleton применяется тогда, когда требуется гарантировать существование единственного экземпляра объекта. Такие ситуации в программировании встречаются достаточно часто. Например, при реализации приложения Windows обычно нужно обеспечить защиту от повторного запуска программы. В приложении, которое моделирует работу компьютера, таких объектов — хоть отбавляй: клавиатура, системный таймер, экран монитора. Довольно часто программы пишутся с протоколированием собственных действий в log-файле — обычно этот файл должен быть единственным.
Паттерн Singleton — это класс, написанный определенным способом, который гарантирует, что в программе может быть создано не более одного объекта данного типа. Классический Singleton реализован с помощью указателя (листинг 6.14).

//Листинг 6.14. Классический Singleton
class Singleton
{ public: 
    static Singleton * Instance();        // функция создания объекта
   private:
    Singleton();        // запрет непосредственного создания объекта
    Singleton(const Singleton &sg);                // закрыто копирование
    Singleton& operator=(const Singleton &sg);     // закрыто присваивание
    ~Singleton();                                 // запрещено уничтожение
    static Singleton * instance_;                // указатель на объект
};
Singleton * Singleton::instance_= 0;    // обязательная инициализация
Singleton * Singleton::Instance()
{   if (instance_ == 0) instance_ = new Sigleton();
    return instance_;  
};

Кроме показанных полей и методов в классе могут быть определены любые другие поля и методы, как открытые, так и закрытые. Да и само имя класса Singleton, естественно, может быть каким угодно — главное, чтобы схема реализации класса соответствовала приведенной.
Как видите, все стандартные средства для создания и уничтожения объекта закрыты. Singleton можно создать только одним способом — вызвав статическую функцию Instance():
Singleton *p = Singleton::Instanse();

Если Singleton уже создан, то эта функция возвращает указатель на него. Таким образом, мы можем иметь сколь угодно много указателей, но объект, на который они указывают — единственный, созданный при первом обращении. Однако пользователь "ненароком" может выполнить операцию delete для указателя p, что является грубой ошибкой. Поэтому Мейерс предложил гораздо более надежный Singleton (листинг 6.15).
//Листинг 6.15. Singleton Мейерса
class Singleton
{ public: 
    static Singleton& Instance();                // функция создания объекта
   private:
    Singleton();            // запрет непосредственного создания объекта
    Singleton(const Singleton &sg);                // закрыто копирование
    Singleton& operator=(const Singleton &sg);     // закрыто присваивание
    ~Singleton();                                 // запрещено уничтожение
};
Singleton& Singleton::Instance()
{   static Singleton obj;    
    return obj;  
};

В такой реализации статический указатель перекочевал в статический метод, превратившись в локальную статическую переменную, которую в принципе уничтожить невозможно, разве что вообще не создавать. Как и для классического Singletona, можно создавать сколько угодно ссылок, но все они будут ссылаться на единственный экземпляр статической переменной.


M>>>Когда класс этой переменной не имеет конструктора по умолчанию, т.е. требуется передача параметров в конструктор.

LVV>>Ну, использовать для этого список инициализации необязательно. А вот для инициализации константных полей класса — обязательно.

M>Как это необязательно?

M>class A
M>{
M>private: A(){};
M>public: A( int a, int b );
M>};
M>class B
M>{
M>public: A a;
M>};
M>Ну и как можно еще не используя список инициализации проинициализировать а?
Ага, с этой стороны я не смотрел. Но в чем глубинный смысл запрещения конструктора по умолчанию в данном случае? Константные-то поля никак по-другому не проинициализируешь, кроме как из списка. А тут мы ИСКУССТВЕЕННО запрещаем конструктор по умочанию. ИМХО, проще его не запрещать и использовать по прямому назначению. А тогда список не нужен.
Ы?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Ответы для С++ от фонаря.
От: mopnex Россия  
Дата: 19.11.04 13:56
Оценка:
LVV>По сравнению с reinterpret_cast, которое даже непереносимо — самое безопасное. Поскольку проверяется на этапе компиляции. А как использовать — это уж в меру собственной испорченности

reinterpret_cast непереносимо? он что не является стандартным?

LVV>>>Один из вариантов — singlton Мейерса

LVV>В такой реализации статический указатель перекочевал в статический метод, превратившись в локальную статическую переменную, которую в принципе уничтожить невозможно, разве что вообще не создавать. Как и для классического Singletona, можно создавать сколько угодно ссылок, но все они будут ссылаться на единственный экземпляр статической переменной.

А .. это я знал, но не знал что имеет имя — Мейерса.

M>>Ну и как можно еще не используя список инициализации проинициализировать а?

LVV>Ага, с этой стороны я не смотрел. Но в чем глубинный смысл запрещения конструктора по умолчанию в данном случае? Константные-то поля никак по-другому не проинициализируешь, кроме как из списка. А тут мы ИСКУССТВЕЕННО запрещаем конструктор по умочанию. ИМХО, проще его не запрещать и использовать по прямому назначению. А тогда список не нужен.
LVV>Ы?

Пример конечно искусственный. Константные поля и ссылки — это обязательное условие.
Re[6]: Ответы для С++ от фонаря.
От: LaptevVV Россия  
Дата: 19.11.04 14:00
Оценка:
Здравствуйте, mopnex, Вы писали:

LVV>>По сравнению с reinterpret_cast, которое даже непереносимо — самое безопасное. Поскольку проверяется на этапе компиляции. А как использовать — это уж в меру собственной испорченности


M>reinterpret_cast непереносимо? он что не является стандартным?

Является — синтаксически. Но реализация — на усмотрение. И сам Страуструп в своей книжке написал, что это преобразование, как правило, непереносимо.

M>>>Ну и как можно еще не используя список инициализации проинициализировать а?

LVV>>Ага, с этой стороны я не смотрел. Но в чем глубинный смысл запрещения конструктора по умолчанию в данном случае? Константные-то поля никак по-другому не проинициализируешь, кроме как из списка. А тут мы ИСКУССТВЕЕННО запрещаем конструктор по умочанию. ИМХО, проще его не запрещать и использовать по прямому назначению. А тогда список не нужен.
LVV>>Ы?
M>Пример конечно искусственный. Константные поля и ссылки — это обязательное условие.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Для чего нужен виртуальный конструктор?
От: Valerio Россия linkedin.com/in/boronin
Дата: 22.11.04 08:36
Оценка:
Здравствуйте, Awaken, Вы писали:

>>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).


A>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?

Суть можно уловить из этой ветки, там же мысли на тему почему 64К, а не скажем размер страницы:
Re: Не пойму.
Автор: Valerio
Дата: 29.06.04
... << RSDN@Home 1.1.4 beta 3 rev. 223>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[6]: Для чего нужен виртуальный конструктор?
От: Слава Шевцов Россия http://www.rentaguru.ru/
Дата: 22.11.04 17:58
Оценка:
Здравствуйте, Valerio, Вы писали:

V>Здравствуйте, Awaken, Вы писали:


>>>условные "сторожевые" области типа 0x00000000-0x0000FFFF (причем, она не одна, а их несколько, например, те же >0xFFFF вниз от верхней границы UserMode).


A>>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?

V>Суть можно уловить из этой ветки, там же мысли на тему почему 64К, а не скажем размер страницы:
V>Re: Не пойму.
Автор: Valerio
Дата: 29.06.04


"Не так всё было, не так" (с) Стругацкие. В эти 64К в эпоху DOS запихивали таблицу прерываний (первый килобайт) и далее пихали ядро операционки. Оттуда это ограничение и пришло. Вот что получается, если на сарайчике построить небоскрёб.
----------------------------------------------------------------------------------------------
Rentaguru
Re[3]: Для чего нужен виртуальный конструктор?
От: DemAS http://demas.me
Дата: 23.11.04 09:15
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>В некоторый языках он есть в прямой форме, а в C++

A>это название одного из производящих паттернов.

Фабричный метод — это он же или что-то другое ?
... << RSDN@Home 1.1.4 beta 3 rev. 220>>
Re[7]: Для чего нужен виртуальный конструктор?
От: Valerio Россия linkedin.com/in/boronin
Дата: 24.11.04 07:16
Оценка:
Здравствуйте, Слава Шевцов, Вы писали:

A>>>а кстати для чего используется этот блок 64Kb в старших адресах пользовательского раздела?

V>>Суть можно уловить из этой ветки, там же мысли на тему почему 64К, а не скажем размер страницы:
V>>Re: Не пойму.
Автор: Valerio
Дата: 29.06.04


СШ>"Не так всё было, не так" (с) Стругацкие. В эти 64К в эпоху DOS запихивали таблицу прерываний (первый килобайт) и далее пихали ядро операционки. Оттуда это ограничение и пришло. Вот что получается, если на сарайчике построить небоскрёб.

не понял, если честно, причем тут DOS с таблицей прерываний — в частности, речь идет о 64К участке чуть ниже 2х или 3х Гб (в зависимости от /3Gb in the boot.ini). Возможно, только первые 64К как-то используются в плане реализации NTVDM с DOS внутри.

Ладно, это уже не суть важно, действительно.
... << RSDN@Home 1.1.4 beta 3 rev. 223>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: Для чего нужен виртуальный конструктор?
От: DIMEDROLL Украина  
Дата: 24.05.09 16:44
Оценка:
Здравствуйте, Awaken, Вы писали:

A>STL

A>-Как выбрать подходящий для задачи STL-контейнер
vector and deque(чит. "дек") для быстрого и произвольного доступа через кв. скобки [], быстрое добавление в конец и начало, добавление в середину достаточно медленное
list — быстрое добавление в середину, медленнее доступ к елементам
stack(FILO (first-in, last-out)) and queue(FIFO) — реализованы через deque, со всеми вытекающими
map(уникальный ключ) and set(уникальное значение) для быстрого поиска, медленная вставка
map содержит пары, ключ-значение, set — только значение являющееся ключом
multimap and multiset то же, но без уникальности
A>-Что такое функтор. Что такое алгоритм
Функтор или функциональный обьект — обьект класса у которого переопределен оператор "()". Дает возможность использовать обьект как функцию.
Алгоритм — последовательность инструкций для решения задачи. В STL для функтора включается <functional>, для алгоритмов — <algorithm>.
functional — предоставляет шаблонные функции для создания функторов.
algorithm — шаблонные функции реализующие стандартные алгоритмы(сортировка, поиск, изменение, удаление и т.д.)
примером послужfт алгоритмs transform(), sort(), binary_search() которые принимают функторы в качестве параметров.
A>-Какие есть способы поиска в контейнерах
в контейнерах можно искать используя алгоритмы или внутренние функции, поиск бывает поэлементный(последовательный) или бинарный(по отсортированным контейнерам), с начала или с конца, искать можно элемент или группу элементов
A>-В чем разница между stack, queue и другими контейнерами
stack(FILO), queue(FIFO) со всеми вытекающими
A>-Что такое распределители (allocators)
используются в STL параметризации контейнеров, для упрощения взаимодействия с разными моделями памяти
хз, надо еще поизучать
Re[2]: Для чего нужен виртуальный конструктор?
От: BulatZiganshin  
Дата: 24.05.09 23:02
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Здравствуйте, Awaken, Вы писали:


вы обвиняетесь в эксгумации трупа C++
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Для чего нужен виртуальный конструктор?
От: Miroff Россия  
Дата: 25.05.09 04:55
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Здравствуйте, Awaken, Вы писали:


Пришла весна и некрофилы,
достали заступы и вилы.
Re[2]: Ответы для С++ от фонаря.
От: Nose Россия  
Дата: 26.05.09 10:08
Оценка:
Здравствуйте, mopnex, Вы писали:


Если исключение произошло в конструкторе, то объект будет не до конца проинициализирован. Будут вызваны деструкторы полей и базовых классов, которые
проинициализированы полностью. Может быть утечка ресурсов, если они были выделены при неоконченной инициализации какого-либо класса.
При выбрасывании исключения в деструкторе часть полей и базовых классов может быть не разрушена, что приведет к возможной утечке ресурсов.


Из конструктора исключения кидать можно и нужно(иначе как узнать об ошибке инициализации?). Просто надо пользоваться RAII повсеместно, тогда утечки не будет.
Из деструктора кидать исключения нельзя по другой причине -- если это исключение возникнет во время раскрутки стека, получим аварийное завершение программы.
Re[2]: Ответы для С++ от фонаря.
От: Nose Россия  
Дата: 26.05.09 10:17
Оценка:
Здравствуйте, mopnex, Вы писали:

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


Для сборщика мусора не нужно точно определять момент когда объекта ниоткуда не видно
Re[3]: Для чего нужен виртуальный конструктор?
От: carpenter Голландия  
Дата: 27.05.09 10:33
Оценка:
Здравствуйте, Awaken, Вы писали:



A>>COM и ATL

A>>-Как передать указатель на интерфейс из одного потока в другой в STA

>>Вопрос не корректный.


A>Тут надо рассказать про функции CoInterThreadMarshalInterfaceInStream и

A>CoGetInterfaceAndReleaseStream, не запутавшись в названиях

а еще можно использовать глобальную таблицу интерфейсов
Весь мир — Кремль, а люди в нем — агенты
Re[8]: Для чего нужен виртуальный конструктор?
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 30.05.09 01:10
Оценка:
Здравствуйте, Снорк, Вы писали:
С>Всю жизнь мечтал, пока работал с dll hell. (Сейчас уже всё равно, после КОМа и НЕТа). Чтобы код был красивым, описываем обычную функцию, грохаем её по указателю, подменяем на свою (из GetProcAddress()) и юзаем без этих страшных разыменований.
а можно поподробнее?
Respectfully,
Alexander Fedin.
Re[3]: Для чего нужен виртуальный конструктор?
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 30.05.09 01:15
Оценка:
Здравствуйте, IT, Вы писали:
IT>Дело не в корректный или некорректный. Дело в том, что эти вопросы задают. Меня как-то один клоун вполне серьёзно спрашивал что такое виртуальный конструктор. Я его переспросил может быть деструктор? Но похоже для него разницы особой не было, но интервью я тогда не прошёл

IT>Вообще, во многих случаях интервьюирующим (особенно если это рекрутер или менеджер) нужно получить простой ответ, чем проще тем лучше, а не рассуждения на тему с примерами и выкладками. Нужно просто назвать несколько ключевых слов, которые есть в их списке


IT>С другой стороны, такой вариает не проходит, если "следствие ведут знатоки". Тут лучше лезть в дебри чем дальше, тем лучше.


И даже не так.
Главное — это дать ожидаемый ответ, а не правильный.
Respectfully,
Alexander Fedin.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.