Nous pouvons probablement convenir que la construction de copie par défaut est mauvaise la plupart du temps en C++, il est donc préférable de la désactiver explicitement avec C++ 11 =delete
ou non-copiable des classes comme boost::noncopyable
. La question est: que se passe-t-il dans les scénarios avancés lorsque nous utilisons plusieurs classes d'héritage ou de public abstraite?Classes C++ non-copiables et héritage multiple, classes abstraites
//Class uncopyable
class uncopyable {...};
//Interface1
class IInterface1 : private uncopyable
{
public:
IInterface1(...)
virtual ~IInterface1(...) = 0;
};
//Interface2
class IInterface2 : private uncopyable
{
public:
IInterface2(...)
virtual ~IInterface2(...) = 0;
};
//Fancy implementation
//FImpl
class FImpl : public IInterface1, public IInterface2, private : uncopyable
{
public:
FImpl(...) {...}
~FImpl(...) {...};
};
- Est-il une bonne pratique de faire toutes les interfaces non copiable (il semble que ce est, pour éviter le découpage)?
- Est-il une bonne pratique d'ajouter incopiable à chaque classe dérivée (de sauvegarde explicite, mais des causes multiples héritage et problèmes diamants?)
Vos interfaces ne ressemblent pas du tout à des interfaces. Ils définissent des constructeurs et n'ont pas de méthodes virtuelles pures (seulement une sorte de destructeur qui ressemble à une violation de syntaxe). – Juliano
'~ IInterface1 (...) = 0' est juste une erreur de syntaxe. Et vous ne voulez pas rendre les destructeurs purs virtuels. –
Ok, corrigé. En utilisant le pseudo-code, pas un vrai code. – Coder