2013-04-24 27 views
6

Istnieje wiele odpowiedzi mówiących tutaj, że nie powinny dziedziczyć ze std :: vector i podobne, takie jak this question. Rozumiem powody i zgadzam się z nimi. Jednak w here Sekcja 4.4.1.2 Bjarne Stroustrup sam dziedziczy ze std :: vector, aby dodać sprawdzanie zasięgu.Dziedziczenie ze standardu std :: vector

Czy to przypadek szczególny, albo po prostu coś, co jest dobre w tym kontekście, czy coś, że naprawdę nie powinno się robić: P

+9

Bjarne Stroustrup to specjalny przypadek. – Chowlett

+0

Myślę, że to najprostszy sposób na pokazanie zasad, które opisuje, bez konieczności konfigurowania skomplikowanej przykładowej klasy. –

Odpowiedz

3

myślę this answer doskonale odpowiada na Twoje pytanie.

Nie jest niemożliwe odziedziczyć po std::vector, to prawdopodobnie byłby bardzo ograniczony (z powodu braku wirtualnego destruktora), dość mylące dla innych i rozciągające się na kompozycję byłoby lepsze/łatwiejsze/łatwiejsze do utrzymania niż dziedziczenie.

Być może Stroustrup po prostu chciał pokazać, że jest to wykonalne, ale niekoniecznie sugeruje, że on to sugeruje.

+0

To ma sens, a ty w ogóle i tak nie będziesz używał polimorficznego wektora. – jcoder

+1

Masz na myśli [tę odpowiedź] (http://stackoverflow.com/a/7302165/743214), prawda? –

+2

@jcoder również zauważyć, że można osiągnąć wiele, bez większości pułapek, za pomocą prywatnego dziedziczenia. – juanchopanza

Powiązane problemy