Spesso è una buona idea avere una classe base astratta per isolare l'interfaccia dell'oggetto.
Il problema è che la costruzione della copia, IMHO, è praticamente rotta per impostazione predefinita in C ++, con i costruttori di copie generati per impostazione predefinita.
Quindi, quali sono i gotcha quando hai una classe base astratta e puntatori grezzi nelle classi derivate?
class IAbstract
{
~IAbstract() = 0;
}
class Derived : public IAbstract
{
char *theProblem;
...
}
IAbstract *a1 = new Derived();
IAbstract a2 = *a1;//???
E ora disabiliti in modo pulito la costruzione delle copie per l'intera gerarchia? Dichiarare la costruzione della copia come privata in IAbstract?
Ci sono delle regole di tre con classi base astratte?