Arrays kannst du nicht in einer Initialisierungsliste initialisieren, das ist richtig. Trotzdem solltest du eine solche Liste, soweit möglich, benutzen. Bei komplexeren Membern (wie z.B. Klassenobjekten) kann eine direktive Initialisierung erheblich einfacher sein als eine Default-Initialisierung mit anschließender Zuweisung. Bei const-Membern und Referenzen geht es gar nicht anders.
Wenn dein a*b übrigens erst zur Laufzeit feststeht, hilft dir ein Array sowieso nicht weiter.
Lass den Operator einfach nicht void, sondern MyClass& zurückgeben (und dann natürlich *this als Rückgabewert).
Die Prüfung auf Selbstzuweisung im Op= könntest du weglassen, die frisst vermutlich mehr Performance, als sie einspart, denn Selbstzuweisung ist sehr selten. Außerdem macht sie deinen Op= wieder Exception-unsicher(er), weil der Adressoperator überladbar ist, und damit werfen könnte.