072

072



Po

const Litera! &operator=(const char *pch)

{

strncpy(m_rgch, pch, sizeof(m_rgch)-2); m_rg ch [s i z e of{m_ rgc h) — 1 ] = 0; return *this;

}

Jeśli nasze bufory pamięci nie zostały dopracowane przez speców od marketingu, to mają skończoną długość. Pamiętajmy o tym zawsze, gdy wykonujemy kopiowanie. Innymi słowy, należy sprawdzać długość bufora przed wykonaniem kopiowania. Jest to szczególnie ważne podczas używania funkcji wbudowanych, takich jak strcpy. W podanym przykładzie zmieniliśmy funkcję strcpy na strncpy, aby zagwarantować, że przy kopiowaniu nie przekroczyliśmy końca bufora.

Tworzenie menedżera pamięci wykrywającego straty

unikanie strat pamięci

Niezależnie od tego, jak dokładnie sprawdzimy kod, zawsze pozostanie w nim kilka błędów. Jednym ze sposobów na uniknięcie strat pamięci jest utworzenie własnego alokatora pamięci wykrywającego straty. W wypadku przerwania procesu i usunięcia alokatora, może on wyświetlić komunikat lub asercję, że pamięć została przydzielona, lecz nie została zwolniona. Można użyć tej informacji do prześledzenia, w jaki sposób powstały straty pamięci.

Globalne i lokalne alokatory pamięci

pisanie szybkiego kodu

Operację new można przeciążać globalnie lub lokalnie. Jeśli przeciążymy operator new globalnie, to zmienimy sposób alokowania pamięci dla całego programu. Jeśli przeciążymy operator new wewnątrz definicji klasy, to określimy sposób alokowania pamięci dla konkretnej klasy. Lokalne przeciążanie operatora new pozwala na pisanie alokatorów pamięci optymalnych dla konkretnej klasy.

Dygresja

Im więcej tworzymy alokatorów pamięci, tym więcej usterek będziemy musieli na-


Wyszukiwarka

Podobne podstrony:
const Literał &operator=(const char *pch){ // Wskazówka 42. // Wskazówka 43. // Wskazówka
ne wskazówki int RExp::IChlnSz(unsigned char chSrc, const char *pch, int cch){ _asm{ xor eax, eax mo
Po class Napis{ private: const int m_cchTest; int m_cch; char *m_pch; void lnicjNapis(const cha
140 TIF char *m_pch; public: int operator==(const Napis& napis) const{ return(strcmp(m_pch, napi
039 TIF Po #define CZYSTE =0; virtual BOOL FOtwórz(const char *szTekst) CZYSTE; Zdarzają się sytuacj
068 TIF unikanie nieoczekiwanych wynikówUżywanie deklaracji const *Przed void Napis::lnicjNapis(char

więcej podobnych podstron