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: Ответы для С++ от фонаря.
От: 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[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[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: Для чего нужен виртуальный конструктор?
От: Spidola Россия http://www.usametrics.ru
Дата: 18.11.04 19:23
Оценка: 6 (1)
Здравствуйте, Awaken, Вы писали:

[SKIPPED]

Чем-то напоминает список вопросов к экзаменам ГАИ. Но всё равно, если правила выучил, а водить не умеешь, лучше шофёром не наниматься
А автору спасибо. Будем знать, какие вопросы нужно перефразировать на собеседовании
... << RSDN@Home 1.1.4 @@subversion >>
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[2]: Ответы для С++ от фонаря.
От: Alexey_VL  
Дата: 21.11.04 01:42
Оценка: :)))
Здравствуйте, mopnex, Вы писали:

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


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



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

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


Блин, хорошо что Страуструп этого не видит. Получить по С++ 50% да еще на двоих с Мейерсом...
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
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>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.