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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен