/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
ostrstring.freeze
Fra : Byrial Jensen


Dato : 12-12-02 19:54

Jeg er i noget ældre C++-kode stødt på konstruktioner som den her:

ostrstream o;
o << "Some text";
o.freeze();

Jeg har forstået at ostrstream svarer til std::ostringstream i
standard C++, men hvilke forskelle skal man være opmærksom på når
man omskriver koden til standarden (f.eks. for at kunne oversætte
med en moderne oversætter)?

Hvad gør freeze() og hvordan gøres det tilsvarende i standard C++?

 
 
Igor V. Rafienko (13-12-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 13-12-02 13:43

[ Byrial Jensen ]

[ ... ]


> ostrstream o;
> o << "Some text";
> o.freeze();


Legacy crap.


> Jeg har forstået at ostrstream svarer til std::ostringstream i
> standard C++, men hvilke forskelle skal man være opmærksom på når
> man omskriver koden til standarden (f.eks. for at kunne oversætte
> med en moderne oversætter)?


Siden ostrstream bygget på char-pekere, men all jævelskapet dette
medførte, måtte man av og til ty til veldig interessante tricks. Jeg
tror ikke du skal bekymre deg så veldig om ting som virket med
strstreams men vil slutte å virke med stringstreams (det er heller det
omvendte som er tilfellet). Du vil måtte muligens omskrive de delene
av koden som utnyttet adgang til den interne[*] char-bufferen på
ikke-trivielle vis.


> Hvad gør freeze() og hvordan gøres det tilsvarende i standard C++?


SVJS bruker man freeze for å sørge for at den underliggende[*]
char-bufferen blir hverken forandret eller deallokert (jeg lurer på
hvorfor/hvordan det skulle være nyttig, men siden man kan få en peker
til bufferen, og siden påfølgende IO operasjoner kan medføre
reallokering, så er det litt kjipt å sitte igjen med en peker til et
område som slutter å være gyldig uten at programmereren gjør noe
eksplisitt med den bufferen).

I moderne standard C++ har man ikke freeze -- den har liksom ikke noe
funksjon lenger, siden den type lavnivå minneadministrering håndteres
av std::string og siden det ikke er mulig å få tak i en peker til et
slik område for en stringstreambuf.





ivr
[*] "underliggende" i dette tilfellet betyr det bufferet som holder
data i en strstreambuf.
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste