Re: не совсем по теме
От: davenger  
Дата: 15.01.04 16:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Сейчас читаю книжку Вандевурда и Джосатиса про шаблоны и там в операторах присваивания для проверки на присваивание к самому себе исползована такая конструкция


В той же книжке написано, что шаблонный оператор = не перекрывает оператор копирования (т.е. const A& A::operator = (const A&) ):

Note that a template assignment operator doesn't replace the default assignment operator. For assignments of stacks of the same type, the default assignment operator is still called.



, и рядом с этим написан код типа:


template <typename T> 
 template <typename T2> 
Stack<T>& Stack<T>::operator= (Stack<T2> const& op2) 
{ 
    if ((void*)this == (void*)&op2) {    // assignment to itself? 
        return *this; 
    } 

    Stack<T2> tmp(op2);             // create a copy of the assigned stack 

    elems.clear();                  // remove existing elements 
    while (!tmp.empty()) {          // copy all elements 
        elems.push_front(tmp.top()); 
        tmp.pop(); 
    } 
    return *this; 
}


не понятен смысл проверки (void*)this == (void*)&op2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.