• [^] # Re: works for me

    Posté par . En réponse à la dépêche Naissance d'un géant : Java. Évalué à 3.

    Tu viens de montrer qu'il est techniquement possible de dériver de std::vector, c'est a dire que le compilateur ne génère pas de diagnostic. Le problème, c'est que le compilateur ne va pas t'avertir des dangers potentiels a l'utilisation.

    En modifiant légèrement le main() :

    int run( std::vector<int> const& v ) {
     try {
     std::cout << v[1] << std::endl;
     } catch (const std::exception & e) {
     std::cout << "received exception" << std::endl;
     return 1;
     }
     return 0;
    } 
    int main() {
     MyVector<int> v;
     v.push_back(5);
     return run( v ) ;
    }
    

    On obtient a l'exécution :

    $ g++ -o vector_inherits -Wall vector_inherits.cpp
    $ ./vector_inherits
    0
    $
    

    Et pourtant, dans la fonction run(), c'est bien l'instance de MyVector qui est utillisée, n'est-ce pas ? Pourquoi le comportement du programme a-t'il changé ?

    Tu auras aussi des résultats comiques si tu ajoute un destructeur spécifique a MyVector et que tu manipules tes instances par l'intermédiaire de pointeur sur sdt::vector...

    Les containers de la STL ne sont pas conçus pour êtres dérivés en public, mais il n'y a pas de garde fou, comme d'habitude.