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.
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.
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.
Im więcej tworzymy alokatorów pamięci, tym więcej usterek będziemy musieli na-