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?