Армянское Радио
@gbg Куратор тега Системное администрирование
aNation: В современных дистрибутивах и та и другая задачи решаются примерно с теми же затратами усилий и на win, и на lin. Тем более, вам веб-сервер ставить.
Ajex: Прочитайте внимательно раздел про ЭЦП. При использовании RSA для ЭЦП вычисление подписи выполняют закрытым ключом, который хранится у вас, даже не на раздающем сервере. Проверку подписи выполняют открытым ключом.
Don Kaban: Там еще на предыдущем интервьюер может интересно так сесть в лужу, если его коварно подловят на том, что хороший оптимизирующий компилятор умеет делать девиртуализацию.
Don Kaban: ну как сказать. Лепить virtual перед каждым деструктором - значит следовать совету Голуба #139. Голуб свой совет не зря написал, и это действительно в общем случае потенциально повышает надежность кода (путем раздувания, отказа от некоторых оптимизаций и так далее) . Особенно, если кто-то потом унаследуется от нашего класса и будет использовать указатель на него. То есть вроде как ответ ВСЕГДА должен быть виртуальным - это 4. А 5, это "всегда виртуальный, но если никто от класса наследоваться и обращаться по указателю не будет, можно и virtual убрать".
Про "саркастически улыбаться". Ну это как минимум не тактично. Можно и рассказать, или хотя бы ссылку дать. Иначе это похоже на поведение плохо написанной программы "Ой все, я упала! Логи? Фиг тебе! И стэктрейс не дам!"
k_brainstorm: тогда проверка такая - предполагаете, что вам нужно добавить в приложение компонент. И смотрите, сколько кода вам нужно перелопатить, чтобы это получилось. Понадобится ли после этого рефакторинг? Возникнет ли пенальти по производительности? Сколько документации придется переписать?
k_brainstorm: Такого универсального "хорошо" не придумаешь. Вам какое "хорошо":
-удобство модификации кода, добавления новых компонентов?
-быстродействие?
-легкость расщепления программы для юнит-тестов?
-скорость разработки?
raiboon: да, все правильно. То есть самый мимими-деструктор:
-объявлен виртуальным (это кстати третий баянный вопрос, "почему деструктор всегда должен быть виртуальным (ну еще есть ответвление на слово final, но это уже глубоко)").
-желательно, чтобы выглядел так
alpha::~alpha()
{
try
{
//деструктор
}
catch(...)
{
cerr << "Что-то откуда-то прилетело, босс. Го отлаживать\n"<<__FILE__<<" ["<<__LINE__<<"] "<<__FUNCTION__<<'\n';
std::terminate();
}
}
raiboon: Правильная формулировка: "Почему нужно ловить в деструкторе все исключения?"
То есть:
1. Бросать исключение в деструкторе можно.
2. Но нужно обязательно его ловить до выхода из деструктора. А также нужно ловить все исключения, которые могли быть выброшены не вами, а тем кодом, который вызван в деструкторе.
Потому, что ваш вызов конструктора из конструктора делает не то, что вы от него ожидаете. Он создает временный экземпляр вашего класса, который тут же убивается, а тот экземпляр, который вызывал конструктор, остается не инициализированным. Объяснение
Вызов конструктора из конструктора ради того, чтобы задать параметры? Про возможность задания параметров по умолчанию вы знаете?
singleton::singleton(int a=600,int b=600);
Вы сделали костыль.
one pavel: по вашим словам получается, что и строки нужно возвращать при помощи new. Все не правильно:
вектор у автора создается не в статической памяти (нет модификатора static), а в локальной памяти метода. После чего делается возврат значения и присваивание его полю в классе. Это означает копирование всех элементов из первого вектора во второй.