LockBuffer



  • Hallo zusammen,
    Bei CString gibt es die Member: LockBuffer und UnLockBuffer. Bei Google und
    und bei den MSDN, und in meinen Büchern, habe ich nichts mir verständliches
    gefunden. Kann sein dass ich zu unfähig dazu bin. Wozu kann man diese Member gebrauchen ? In dem Zusammenhang gibt es Referenz-Zähler. Bewirken diese, dass
    ein CString-Objekt nur einmal gespeichert wird, und erst dann gelöscht wird, wenn kein Objekt mehr auf dieses verweist ?


  • Mod

    Mal die erste Idee schon versucht: RTFM (Read the Fine MSDN)?

    https://msdn.microsoft.com/en-us/library/aa300480(v=vs.60).aspx

    LockBuffer wird verwendet um einen Buffer an einer bestimmten Speicherstelle zu halten. Das ist speziell wichtig, wenn ein String an einen ODBC Vorgang gebunden wird. Bei einer Zuweisung eines anderen String könnte ja der Buffer freigegeben und an einer anderen Stelle allokiert werden.

    Grundsätzlich solltest Du Dich mal mit dem Design von CString auseinandersetzen. CString hat eine Copy on Write semantic. Und dazu wird ein Referenzzähler verwendet. Wird ein CString kopiert wird kein neuer Speicher angelegt (für den String), entsprechend wird der Referenzzähler erhöht. Die Überrgabe eines CString an eine Funktion ist damit weitaus schneller als manche Implementierungen von std::string.



  • Danke Martin !


Log in to reply