New
Z Wikipedii
new (ang. nowy) - w programowaniu obiektowym słowo oznaczające nakaz utworzenia obiektu; istnieje w różnych językach programowania obiektowego, jak C++, Java i C#, jednak odrobinę różnią się znaczeniem.
[edytuj] new w C++
Klasa* p = new Klasa( x, y, z );
Słowo new podstawą wyrażenia new, które do działania stosuje m.in. operator new. Funkcja operator new jest odpowiedzialna za przydzielanie pamięci i zwraca wskaźnik typu void* do jej początku. Wyrażenie new zawiera słowo kluczowe new oraz wywołanie konstruktora, a jego działanie polega na wywołaniu funkcji operator new, wywołaniu podanego konstruktora na tej przydzielonej pamięci, i zwróceniu wskaźnika na tę pamięć jako wskaźnika na obiekt typu, który podano jako wywołanie konstruktora w wyrażeniu new.
Utworzony w ten sposób obiekt istnieje aż do wywołania delete. Obiekty do których wskaźniki zostały zgubione powodują powstanie wycieku pamięci. W C++ można w niektórych implementacjach stosować opcjonalnie odśmiecanie pamięci.
W C++ operator new może zostać przedefiniowany zarówno globalnie, jak i lokalnie na daną klasę. Funkcja operator new przyjmuje jako argument liczbę bajtów pamięci do przydzielenia. Istnieje również możliwość zdefiniowania operatora new z dwoma argumentami, przy czym drugi argument jest dowolnego typu. Przekazanie go do funkcji operator new wykonuje się poprzez wyrażenie:
new(arg2) Klasa( x, y, z );
Jedną ze standardowych postaci funkcji operator new z dwoma argumentami jest tzw. placement new, gdzie drugim argumentem jest wskaźnik typu void*, wskazujący pamięć, pod którą należy umieścić obiekt. Operator ten domyślnie nie robi nic poza zwróceniem swojego drugiego argumentu, zatem wyrażenie new używające tego operatora stanowi jedynie sztuczne wywołanie konstruktora.
Operator new w C++ określa jedynie wymuszenie utworzenia obiektu o nieokreślonej trwałości. Nie jest to jedyne wyrażenie służące do tworzenia obiektów; obiekty w C++ tworzy się również jako zmienną lokalną:
Klasa zmienna( x, y, z );
oraz obiekt tymczasowy:
Klasa( x, y, z );
To ostatnie jest powszechnie stosowane np. w wyrażeniach throw, służących do zgłoszenia wyjątku.
[edytuj] new w Javie i C#
Klasa k = new Klasa( x, y, z ); int t [] = new int [20];
Słowo kluczowe new w Javie i C# wraz z wyrażeniem konstruktora stanowi wyrażenie tworzące obiekt. Wyrażenie to zwraca referencję do utworzonego obiektu. Jest to jedyne w tych językach dozwolone wyrażenie pozwalające utworzyć obiekt i obowiązuje również w wyrażeniach throw, przez po słowie throw praktycznie zawsze musi być słowo new.
Obiekt utworzony w ten sposób jest obiektem o nieokreślonej trwałości i istnieje dotąd, aż ze wszystkich danych używanych w programie znikną wszystkie istniejące referencje do tego obiektu (plus ewentualnie czas potrzebny na stwierdzenie tego faktu). Odzyskanie pamięci po "zgubionych" obiektach jest zapewnione przez odśmiecanie pamięci.
W Javie i C# ten sposób tworzenia obiektów jest jedynym sposobem tworzenia obiektów typów klasowych. W C# dodatkowo istnieje typ strukturalny, którego obiekty tworzy się tak, jak obiekty typów wbudowanych.