polymorphisme entre shared_ptr<B> et shared_ptr<A>
Salut!
Voici mon problème:
J'ai une classe Interface (pour l'exemple ;) )
Code:
1 2 3 4 5 6
|
class Interface {
// cette fonction doit retourner un pointeur vers un objet "copie" qu'elle a crée
Interface * getIndependentCopy();
}; |
que j'implémente avec Implementation (toujours pour l'exemple)
Code:
1 2 3
| class Implementation : public Interface {
Implementation * getIndependentCopy();
} |
On remarque que getIndependentCopy de Implementation retourne un pointeur de Implementation et non de Interface, mais le compilo et content et moi aussi.
je voudrais utiliser des shared_ptr pour le retour de getIndependentCopy, pour empecher d'avoir de la mémoire allouée dans la nature, sans personne qui ne s'en occupe. Ce code est
Code:
1 2 3 4 5 6 7 8 9 10
|
class Interface {
// cette fonction doit retourner un pointeur vers un objet "copie" qu'elle a crée
boost::shared_ptr<Interface> getIndependentCopy();
};
class Implementation : public Interface {
boost::shared_ptr<Implementation> getIndependentCopy();
} |
mais je reçois alors à la compilation l'erreur "'Implementation ::getIndependentCopy' : overriding virtual function return type differs and is not covariant from 'Interface::getIndependentCopy'
Sans doute du au fait que boost::shared_ptr<Implementation> ne dérive pas de boost::shared_ptr<Interface>???
Est ce que quelqu'un saurait comment faire pour résoudre ce problème?
Merci!