Entertaiment, иттить его.

Совершенно случайно посмотрели вчера по SBS французский фильм 2003 года Janis and John (осторожно, под ссылкой спойлер, а фильм относится к разряду “обязателен к просмотру”).

Что я могу сказать – голливуд сосет. С причмокиванием. Практически все, за считанными исключениями, многомиллионные американские творения последних лет, что мы посмотрели, можно отнести к категориям “унылое говно”, “римейк хорошего старого фильма” (и все равно унылое говно) или “снято по мотивам комикса” (такое вообще не смотрим, поэтому не скажу, унылое ли это говно).

C++ мантра или почему порядок вызова конструкторов так важен.

Читать вдумчиво, с придыханием, каждое утро по 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.

Что интересно, найти такой баг может быть очень-очень-очень сложно.

7 visitors online now
7 guests, 0 members
Max visitors today: 11 at 07:38 am MST
This month: 23 at 05-03-2012 08:23 am MST
This year: 29 at 01-23-2012 02:50 am MST
All time: 45 at 02-23-2011 09:11 am MST