|
|
Chybka
|
2.2.2011 13:48
Jaroslav Šmíd
|
Ve vaší třídě Stack máte (zřejmě nechtěnou) "chybku". Velikost pole máte určenu prvkem typu int. Standard pro tento účel definuje size_t, resp. size_t je typ vracený operátorem sizeof a maximální velikost alokovatelného objektu na daném systému se musí vejít do rozsahu typu size_t. size_t je neznaménková celočíselná hodnota.
Standard nikde nedefinuje, že sizeof(int) == sizeof(size_t) a je dovoleno, aby platilo sizeof(int) <= sizeof(size_t) či sizeof(int) >= sizeof(size_t). Z toho důvodu "nevíte", jestli zbytečně neomezujete uživatele dané třídy malým rozsahem typu int (a ještě k tomu "dovolujete" záporné velikosti), nebo naopak mu dáváte možnost alokovat něco, co na daném systému alokovat nelze. Používat typ int místo size_t je špatný zvyk různých java, C#, ... programátorů. Ale alespoň, že nikde nepřetypováváte vector<T>::size_type na int, což některá prasata taky ráda dělávají a to ještě bez toho, aniž by zkontrolovali výsledek přetypování, jestli má stejnou hodnotu. |
|
|
Re: Chybka
|
2.2.2011 15:37
Petr Sklenička
|
Máte pravdu. Když to budeme brát opravdu do hloubky, chybka to je, přiznávám. V jistých případech to skutečně může způsobit problém. Nakonec si ale přeci jen neodpustím takovou "obligátní" výmluvu, že článek se točí kolem šablon, ne kolem zásobníku, který měl posloužit pouze jako příklad. I tak ale díky za upozornění, protože to opravdu chyba (ač v tomto případě zcela nepodstatná) je. |
|
|
|
|
KOMENTARZE
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|
©Pavel Kysilka - 2003-2024 |
maillinuxsoft.cz | Design:
www.megadesign.cz
|