Вопрос к профи.
От: TepMuHyc  
Дата: 21.01.03 14:41
Оценка: 2 (1)
Вот... Сотворил такой assignment.

my_class& operator=(const my_class& rhs)
{
   struct{ char data[sizeof(*this)]; } tmp;
   new(&tmp) my_class(rhs); //создаем новый временный экземпляр класса в буфере tmp.
   this->~my_class();//вызываем деструктор на текущем экземпляре.
   memcpy(this, &tmp, sizeof(*this));//бинарно копируем временный экземпляр в текущий.
   return *this;
}


Скажу сразу: класс безопасен для бинарного копирования — т.е. он не содержит ссылок и указателей на самого себя.
По exception-safety все тоже прокатывает на ура — единственное место где может вылезти исключение — это конструктор копирования — в этом случае недоделанный временный экземпляр будет автоматически прибит а текущий экземпляр сохранит свое сотояние.

Но... Гложут смутные сомнения: все так просто и прозрачно, но я нигде еще не видел такого подхода.
Значит, ДОЛЖНЫ быть грабли. Вопрос ГДЕ?
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.