167 TIF

167 TIF



if(m_pstrumień->DajTypStrumienia() != typstrumieniaPlik)

{

delete m_pstrumień; m_pstrumień = NULL;

}

}

if(NULL == m_pstrumień)

m_pstrumień = (PSTRUMIEŃ)new STRUMPLIK(TRUE);

Przydzielanie pamięci i tworzenie uchwytów (plików, pamięci, strumieni itp.) jest kosztowne. Usuwanie pamięci bywa jeszcze bardziej kosztowne, ponieważ menedżery pamięci często odkładają czyszczenie struktur danych aż do momentu pojawienia się operacji delete. W miarę możliwości należy unikać przydzielania i usuwania pamięci oraz uchwytów. We fragmencie „Przed” usuwamy istniejący uchwyt i tworzymy nowy. We fragmencie „Po” natomiast sprawdzamy najpierw, czy uchwyt nie jest uchwytem pliku. W takiej sytuacji, zamiast go usuwać i odtwarzać, po prostu używamy go ponownie.

Oprócz sprawdzania, jak nasz kod przydziela pamięć, możemy także napisać swój własny alokator pamięci. Jeśli wiemy, jak będziemy używać pamięci, to możemy zwiększyć szybkość kodu, tworząc własny menedżer pamięci zamiast standardowego. W takiej sytuacji należy jednak zachować szczególną ostrożność i świadomość wykonywanych czynności. W razie jakichś wątpliwości lepiej użyć standardowych alokato-rów pamięci. Utworzenie własnego menedżera pamięci może poprawić szybkość, ale może też wprowadzić wiele nieprzyjemnych usterek.

128


Ostrożność przy używaniu funkcji działających na napisach

pisanie szybkiego kodu

Przed

//m_pch ma długość m_cch strcpy(pchNowy, m_pch); strcat(pchNowy, pch);

Po

//m_pch ma długość m_cch strcpy(pchNowy, m_pch); strcpy(pchNowy+m_cch, pch);

Tak naprawdę ta wskazówka dotyczy każdej funkcji. Dokładne poznanie działania danej funkcja może pomóc w jej wydajnym użyciu. Szczególną ostrożność trzeba jed-


Wyszukiwarka

Podobne podstrony:
063 TIF $ŁOW::~SŁOW() { if(m_pstrumień) delete m_pstrumieri; } Przed zwolnieniem pamięci należy się
070 TIF virtua! ~lntelWskPodst(){ rf(m_pt) delete m_pt; m_pt = NULL;} T &operator*() const{ retu
081 TIF Klasy ~Napis(void){ if(m_pch) delete m_pch;} }; Wszystkie zmienne składowe trzeba inicjalizo
118 TIF ~Napis(void){ if(m_pch) delete m_pch;} }; Dostęp do konstruktorów można kontrolować zamienia
~Napis(void){ if(m_pch) delete m_pch;} }; Po class Napis{ private: const int m_cchTest; int
Deleting a Table If you no longcr nccd a table, then you can delete it using SQL Developer. When you
82 (167) ;    ■ if *«• -    4!

więcej podobnych podstron