Ik heb een vraag over de syntax voor de allocatie van een object. C++ zelf doet nogal wat zaken onder water voor de aanroep van constructors.
Voornamelijk is mijn vraag: waarom gebruiken sommige mensen haakjes als ze een object op de heap willen maken die een constructor zonder parameters heeft? Voorbeeld:
Mijn grootste probleem hiermee is dat het verwarring kan opleveren als men hetzelfde geintje gebruikt bij allocatie op de stack.
Om bovenstaande fout te voorkomen zou mijn mening zijn gebruik voor een object dat alleen een default constructor bevat in geen van beide gevallen haakjes.
Ik heb een simpel testprogramma gemaakt waarbij de constructor/ copy constructor/ asignement operator van Examples een debug melding geven.
Output:
Voornamelijk is mijn vraag: waarom gebruiken sommige mensen haakjes als ze een object op de heap willen maken die een constructor zonder parameters heeft? Voorbeeld:
C++:
1
2
| Object* object = new Object(); // Waarom hier de haakjes toevoegen? Object* object2 = new Object; // Werkt ook |
Mijn grootste probleem hiermee is dat het verwarring kan opleveren als men hetzelfde geintje gebruikt bij allocatie op de stack.
C++:
1
2
| Object object(); // Dit is een inline functie en de constructor wordt niet aangeroepen!! Object object2; // Default constructor wordt aangeroepen. |
Om bovenstaande fout te voorkomen zou mijn mening zijn gebruik voor een object dat alleen een default constructor bevat in geen van beide gevallen haakjes.
Ik heb een simpel testprogramma gemaakt waarbij de constructor/ copy constructor/ asignement operator van Examples een debug melding geven.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
| Examples e; // Default constructor (0 parameters) Examples b = 1; // Implicit constructor (Single parameter) Examples c(1); // Constructor (Single parameter) Examples d(b); // Copy constructor Examples f = c; // Implicit copy constructor Examples x; x = b; // Object is already constructed so this is a assignement operator Examples y(); // INLINE FUNCTION! NO CONSTRUCTION Examples* examples1Ptr(new Examples); Examples* examples2Ptr(new Examples()); Examples* examples3Ptr = new Examples; Examples* examples4Ptr = new Examples(); |
Output:
code:
1
2
3
4
5
6
7
8
9
10
11
| Default constructor 1 parameter constructor 1 parameter constructor Copy constructor Copy constructor Default constructor Asignment Operator Default constructor Default constructor Default constructor Default constructor |