FANDOM


W przypadku typów z własnymi konstruktorami w zasadzie brak różnicy w tworzeniu obiektu za pomocą new oraz new(). Np.:

class Test
{
 int a;
public:
 Test() { a=0; }
};
int main()
{
 Test *a = new Test;
 Test *b = new Test();
 delete a;
 delete b;
 return 0;
}

W kodzie podanym wyżej wyrażenie new Test bedzie miało dokładnie takie samo konsekwencje jak wyrażenie new Test(). Różnica istnieje dla typów prostych nie posiadających własnego konstrukora. Wówczas oprócz alokacji pamięci dokonywana jest inicjacja wartością taką jaką zainicjowana zostałaby zmienna statyczna tego typu. Przykład:

#include 


using namespace std;

int main()
{
	long *a_ptr = new long int;
	long *b_ptr = new long int();

	cout<<"*a_ptr: "<<*a_ptr
           <<"\n*b_ptr: "<<*b_ptr<

Jeśli uruchomimy ten program wynik może być taki: *a_ptr: -1163005939
 *b_ptr: 0
Zmienna statyczna typu long int zostałaby zainicjowana wartością 0 dlatego w przypadku *b_ptr otrzymujemy taka wartość. Wyrażenie *a_ptr będzie miało przypadkowe wartości. ;>