Verwijderd schreef op 19 februari 2003 @ 13:07:
Waar ik meestal mee bezig zit zijn doorgeven van classes met een geheugengrootte van +-10 a 12KB. Ik heb liever niet dat die by value doorgegeven worden, anders lagged dat de hele server.
Bliep klasses van 10-12Kb? Ik mag toch hopen dat dat incluis indirect gealloceerd geheugen is?
Wat ik gewoon wil bereiken is een adres doorgeven. Op deze manier is mij verteld (tenzij jij anders beweerd of course

) dat je enkel adres doorgeeft (dus 4 / 8 bytes). En dit is zeker sneller als 10 of 12Kb.
Klopt totaal. Daarom zei ik ook dat je
atomaire types altijd by value doet. Fyi dan heb ik het dus over ints, floats, chars en zelfs pointers (!). Een class is per definitie geen atomair type, dus altijd by const-ref.
Ivm die const-reference. Wat stel je dan zelf voor? Of hoe doe je het zelf? Als ik een const gebruik is dit met de bedoeling dat aan dat ding niets veranderd mag worden. (bvb bij "const int &I" mag I niet gewijzigd worden.
By-value is zelfs handiger voor atomairen. Denk bijvoorbeeld aan:
C++:
1
2
3
4
5
6
7
| void MyWindow::Width(int p_Width)
{
// Correct non-existant width
if(p_Width < 1)
p_Width = 1;
.....
} |
Een by-value parameter mag je wijzigen zonder dat je eerst een lokale kopie hoeft te maken: je
hebt al een lokale kopie.
Ik probeer zoveel mogelijk const te gebruiken. Ik vind dit enorm handig want dan weet ik dadelijk wanneer ik ergens iets verander daar ik eigenlijk niet aan zou mogen komen.
Ook daar ben je niet consequent in
Je zou nl. die operator overload ook makkelijk const kunnen maken, waarmee hij aan de boze buitenwereld meldt dat ie niets in de class verandert. Dit doe je als volgt:
C++:
1
| inline operator int() const { return m_Number; } |
De extra beveiliging die dit levert is dat een const-functie zelf alleen maar andere const-functies mag aanroepen. Je garandeert niet alleen voor jezelf hiermee integriteit, de compiler kan deze informatie ook gebruiken om extra optimalisaties uit te voeren (denk aan registercaching).