[C++] Jak zjistim, zda de o ukazatel?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod root 7. 9. 2006 17:07

Jojo, ale pointer-to-member + samblony proste ruluje :D Uz jsem tomu nasel i uplatneni :-B
root
Junior
Uživatelský avatar

Odeslat příspěvekod singleton 7. 9. 2006 17:31

2root: myslel som si, ze sa tu uz neozvem, ale ja ta naozaj nechapem. ved ludia ti nechcu zle poradit a ty ich urazas.

Neda mi to a poukazem na niekolko chybnych veci v kode:

typ Hooks je definovany ako:
typedef multimap< Hook_t*, HookHandle > Hooks;

1.) funkcia:
addHook( Hook_t hook, HookHandle fce );
vlozi do map (Hooks) adresu automatickej premennej, co skonci na "access violation..."

2.) funkcia:
delHook( Hook_t hook );
vyhladava pomocou hooks.find(hook), co je zle, pretoze v map (Hooks) mas ako kluce ulozene adresy (Hook_t *)

3.) funkcie call a delHook:
typename sa pouziva v deklaracii sablony, inde sa pouziva typedef

4.)funkcia call:
vo for mas chybu, premenna HookIt nebola definovana:
for( HookIt = hooks.lower_bound( &hook ); ...

5.)funkcia call:
vytvaras typ T s impicitnym konstruktorom a potom volas jeho procedury -- na taketo nieco sa hodi skor staticka funkcia, nie clenska

6.) operator <:
ked chces implementovat operator < za kazdu cenu (nezalezi ti na usporiadani), aby ti fungoval map, tak aky vyznam ma vracat rovnost objektov? lepsie by bolo vracat konstatnu hodnotu alebo porovnavat iba cast objektu

7.) funckia delHook:
ak vymaze prvok, vrati 1, inak vrati 0 -- v takychto pripadoch by sa mal pouzivat bool; respektive vracat pocet vymazanych prvkov

8.) funkcia delHook:
prvky z multimap si mal mazat pomocou overloadu funkcie:
size_type erase(const key_type& _Key);
a nie najprv vyhladat, potom ulozit iterator, potom otestovat iterator a nakoniec funkcia erase

9.) aspon ked davas na forum svoj zdrojak, tak si prosim ta vymaz tie riadky komentaru, lebo clovek zaspi skor ako si docita tych par riadkov kodu :)

Ostava mi len dufat, ze moju kritiku primes konstruktivne a ze mi za odmenu nebudes nadavat do dementov a ze nic neviem.
singleton
Junior

Odeslat příspěvekod Kyosuke 8. 9. 2006 17:25

root píše:Jojo, ale pointer-to-member + samblony proste ruluje :D Uz jsem tomu nasel i uplatneni :-B


A teď se ještě naučit rozdíl mezi stackem a heapem a budeš maximální king… :mrgreen: :mrgreen:
Kyosuke
Junior

Odeslat příspěvekod Kyosuke 8. 9. 2006 23:12

singleton píše:4.)funkcia call:
vo for mas chybu, premenna HookIt nebola definovana:
for( HookIt = hooks.lower_bound( &hook ); ...


Já si ještě kopnu do mrtvoly: Multimapa chce referenci na objekt. On jí předá (jak píšeš v 1)) pointer, takže multimapa ukládá jako klíče pointery na automatické proměnné. A ve funkci call jiný pointer na objekt na stacku použije jako klíč. Jak má zaručeno, že odpovídající pointer v té mapě vůbec bude? Leda, že by funkce call a addHook měly stejný paměťový layout parametrů a lokálních proměnných, pokud jde o hook předávaný na zásobníku, a byly zavolány ve stejné úrovni zanoření – nebo prostě tak, aby call měl svůj parametr hook na zásobníku stejném místě v paměti jako addHook, který ho přidal…ale kde je v tom smysl (pominu-li, že tohle si každý kompilátor zorganizuje sám)? :roll:
Kyosuke
Junior

Odeslat příspěvekod singleton 9. 9. 2006 11:35

to je tak, ked taky expert zacne programovat :D
a ze povedal nieco zle na diskusiu na zive.cz -- tak hanenie od neho nas rozhodne neurazi :lol:
singleton
Junior

Odeslat příspěvekod Kyosuke 9. 9. 2006 14:30

No, dal jsem nakouknout nejlepším C++kařům, co znám a které velice respektuju, a pak se jen bavil… :lol: Já radši půjdu zase tvrdě dřít toho Eckela, Alexandrescua a Suttera, abych jednou nedopadl stejně. :-)
Kyosuke
Junior

Předchozí stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků