Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > smart pointer-ы


Автор: Master01 21.9.2008, 00:06
всем, привет

вот решил заняться smart pointer-ами. Нашёл замечательную книжку (хочется так думать)
Джеффа Элджера и углубился в эту увлекательную областьsmile

написал вот что

Код

class CInteger 
{
private:
    int value;

public:
    __stdcall CInteger():value(0) {}
    __stdcall CInteger(int value):value(value) {}
    virtual __stdcall ~CInteger() {};

    operator int() {return value;}
    void __stdcall msgbox() { MessageBox(NULL,"CInteger.msgbox","CInteger.msgbox",MB_OK); }
};

и
Код

class CPInteger
{
private:
    CInteger *pCInteger;
public:
    __stdcall CPInteger() { pCInteger = NULL;};
    __stdcall CPInteger(CInteger *pCInteger):pCInteger(pCInteger) {};
    virtual __stdcall ~CPInteger() {};

    operator CInteger*()   { return pCInteger; }
    CInteger* operator->() { return pCInteger; }
};


CInteger - просто некоторый класс.
CPInteger - умный указатель для него.

в Main пишу следуещее:
    CPInteger psp;
    psp->msgbox();

в результате чего на экране появляется соответствующий messadgebox, т.е. всё работает нормально.

Далее изменяю CPInteger(см. 11 строку)
Код

class CPInteger
{
private:
    CInteger *pCInteger;
public:
    __stdcall CPInteger() { pCInteger = NULL;};
    __stdcall CPInteger(CInteger *pCInteger):pCInteger(pCInteger) {};
    virtual __stdcall ~CPInteger() {};

    operator CInteger*()   { return pCInteger; }
    CInteger* operator->() { return NULL; }
};

т.е. теперь перегруженный оператор -> всегда возвращает NULL, запускаю на выполнение... ВСЁ РАБОТАЕТ!!!!!
ради смеха пробовал return reinterpret_cast<CInteger>(87878787)  и что вы думаете? во время отладки стрелочка дебаггера 
благополучно перескакивает на строчку "void __stdcall msgbox() { MessageBox(NULL,"CInteger.msgbox","CInteger.msgbox",MB_OK); }"
, в в окошке watches значение указателя this отображается как 53CEC83!!! т.е. там есть объект...

я конечно понимаю что это smart поинтеры.. но всё жsmile

Сильно подозреваю компилятор.
использую Visual studio 2003, я в принципе на неё только пересел, может что-то не так настроил.....

Добавлено через 2 минуты и 54 секунды
прошу прощения! - случайно дважды создал тему)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)