Re[3]: Не генерируется оператор присваивания в шаблоне класс
От: Павел Кузнецов  
Дата: 20.07.05 23:46
Оценка:
MicroCephalis,

> почему тогда при explicit'е он оператор присваивания по умолчанию сам не генерит, но и из предка брать не желает?


Копирующий оператор присваивания в этом случае все равно неявно объявляется, но использовать его компилятор в случае присваивания IUnknown* не может, т.к. для этого ему нужно неявно сконструировать CVideoEditWrapper из IUnknown*, что ты, поместив в объявлении соответствующего конструктора explicit, компилятору делать запретил. Убедиться в том, что копирующий оператор присваивания объявлен и доступен для использования можно попытавшись присвоить объекту CVideoEditWrapper другой объект этого же типа:
// где-то дальше
CVideoEditWrapper vew;
// еще дальше
vew = CVideoEditWrapper(); // Здесь.


> Да и разве генерятся операторы?


Да. Неявно объявляются (и в случае фактического использования определяются) следующие 4 специальные функции-члены: конструктор по умолчанию, конструктор копирования, копирующий оператор присваивания, деструктор. В этом легко убедиться, проанализировав следующий (валидный) пример:
struct S { };
int main()
{
   S s;     // конструктор по умолчанию
   S s1(s); // конструктор копирования
   s = s1;  // копирующий оператор присваивания

   // неявный вызов двух деструкторов
}
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.