Różnica pomiędzy new oraz new()

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 <iostream>
 
using namespace std;
 
int main(int argc, char *argv[]){
    long *a_ptr = new long int;
    long *b_ptr = new long int();
 
    cout<<"*a_ptr: "<<*a_ptr
           <<"\n*b_ptr: "<<*b_ptr<<endl;
 
        delete a_ptr;
        delete b_ptr;
        return 0;
}

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.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License