Posted by vital on December 4, 2008
Совершенно случайно посмотрели вчера по SBS французский фильм 2003 года Janis and John (осторожно, под ссылкой спойлер, а фильм относится к разряду “обязателен к просмотру”).
Что я могу сказать – голливуд сосет. С причмокиванием. Практически все, за считанными исключениями, многомиллионные американские творения последних лет, что мы посмотрели, можно отнести к категориям “унылое говно”, “римейк хорошего старого фильма” (и все равно унылое говно) или “снято по мотивам комикса” (такое вообще не смотрим, поэтому не скажу, унылое ли это говно).
Posted by vital on December 1, 2008
Читать вдумчиво, с придыханием, каждое утро по 128 раз
“Порядок вызова конструкторов членов класса определяется только порядком их появления в объявлении класса. Список инициализации порядок не определяет”!
Полдня убил сегодня на поиск бага. Был класс с членом-смартпоинтером и еще одним членом, который инициируется таким же смартпоинтером:
class MyClass{
public:
MyClass(SmartPointerToSomeThing);
private:
SomeOtherClass m_OtherClass;
SmartPointerToSomeThing m_VeryImportantSmartPointer;
};
MyClass::MyClass(SmartPointerToSomeThing Ptr):
m_VeryImportantSmartPointer(Ptr),
m_OtherClass(m_VeryImportantSmartPointer) ///< fuck up is here
{
}
// Has to be instead:
MyClass::MyClass(SmartPointerToSomeThing Ptr):
m_VeryImportantSmartPointer(Ptr),
m_OtherClass(Ptr) ///< Note - Ptr used instead of member
{
}
Что произошло в первом случае?
Да ничего страшного, просто члену нашего класс m_OtherClass подсовывался еще не инициализированный экземпляр умного указателя. А не инициализирован он был потому, что в интерфейсе класса самрт поинтер этот объявлен позже m_OtherClass.
Что интересно, найти такой баг может быть очень-очень-очень сложно.