Czyszczenie zmiennej utworzonej poprzez new

0

czytam sobie kod i widze takie cos

public Constructor()
    {
        m_data = new byte[0];
        m_index = 0;
    }
public void Clear()
    {
        m_data = new byte[0];
        m_index = 0;
    } 
public void Trim()
    {
        byte [] new_data = new byte[m_data.Length - m_index];
        Array.Copy (m_data, m_index, new_data, 0, new_data.Length);
        m_index = 0;
        m_data = new_data;
    } 

Juz mniejsza o to co to robi. Chodzi mi jedynie czy jest to poprawne? Przyzwyczajony jestem do c++, takie cos powodowaloby wycieki pamieci. W ogole czemu [0]? Czemu po tym jak jest[0] przypisuje sie jakas inna tablice utworzone przez new? Czy to jest ok?(nie moge zapytac autora kodu). Jezeli nie jest to ok, jak poprawnie to mozna napisac?

0

przypisanie do nulla tutaj nie do konca zadziala bo nie bedzie wtedy funkcji length ktora jest potrzebna

1

Jak dla mnie całe to Clear() jest zbędne kompletnie nic nie wnosi GC i tak wyczyści ten obszar pamięci kiedy przestawnie być używany i jak mu się zachce. I robienie m_data = new byte[0]; lub m_data = null; według mnie nie kompletnie nic nie wnosi przynajmniej w ujęciu kodu który został pokazany.

1

wpisanie nulla tylko wprowadzi zamieszanie przez ciągłą konieczność sprawdzania czy wartość nie jest nullem przed jakąkolwiek operacją (na przykład sprawdzeniem wielkości tablicy)
pusta tablica wprowadza wygodę i spójność

ogólnie nulle do oznaczania pustych wartości są dość upierdliwe - lepiej skorzystać z pustego obiektu ( http://pl.wikipedia.org/wiki/Pusty_Obiekt_(wzorzec_projektowy) )
jeżeli dzieje się to w krytycznej części aplikacji gdzie ważne są nanosekundy - możesz zapamiętać pusty obiekt jako stałą (czy singleton) i przypisywać go zamiast tworzyć za każdym razem nowy
nie testowałem ale samo stworzenie pustej tablicy nie powinno zająć więcej czasu niż "stworzenie" zmiennej typu int - GC nawet nie ma tu za dużo do sprzątania i też się na pewno tym nie przejmie

1 użytkowników online, w tym zalogowanych: 0, gości: 1