• [^] # Re: works for me

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Naissance d'un géant : Java. Évalué à 2.

    Je te conseille la lecture des bouquins de Meyers, qui te permettraient de comprendre que ce que tu viens d'écrire, c'est de la merde.

    int main()
    {
     std::vector<int> *pv = new MyVector<int>;
     pv->push_back(5);
     try {
     std::cout << (*pv)[1] << std::endl;
     } catch (const std::exception & e) {
     std::cout << "received exception" << std::endl;
     return 1; // undefined behaviour
     }
     delete pv ; // explosion en vol
     return 0;
    }
    

    La norme, tu sais, le document qui décrit peu ou prou le langage C++ (comprenant la STL), spécifie clairement que les conteneurs standards ne sont pas dérivables publiquement. Tu es tombé dans le piège à débutant. Welldone.

    Ici, le soucis est évidement que les conteneurs standards ne définissent pas de destructeur virtuel, ce qui fait que la classe template n'est pas conçue pour être dérivée.

    Au pire, tu aurais pu composer avec l'héritage privé, s'eut été acceptable, mais ta classe dérivée n'aurait plus été un std::vector.