|
|
Ten artykuł od 2010-03 wymaga uzupełnienia źródeł podanych informacji.
Informacje nieweryfikowalne mogą zostać zakwestionowane i usunięte.
Aby uczynić artykuł weryfikowalnym, należy podać przypisy do materiałów opublikowanych w wiarygodnych źródłach. |
new (ang. nowy) - w programowaniu obiektowym jest to instrukcja, która tworzy nowy obiekt. Istnieje w różnych językach programowania obiektowego, takich jak C++, Java i C♯, w każdym jednak inaczej się zachowuje.
new w C++
Klasa* p = new Klasa( x, y, z );
Funkcja 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.
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 przynajmniej tak długo, jak długo istnieją referencje do niego. 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.
Zobacz też
- konstruktor
- Wyciek pamięci
- Odśmiecanie pamięci