Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How new differentiates between PODs and user defined data types?

First:

int *p = new int;

Second:

class A{};

A *pa = new A;

How does new and compiler determines when to call constructor? In first case compiler does not generate code to call constructor of p and in second case it generates code to call constructor of A. Which mechanism is used to make such choice?

like image 841
Vikas Avatar asked Dec 13 '22 17:12

Vikas


2 Answers

The compiler knows that A is a class, because it has seen the class declaration, so it uses the synthesised default constructor. It knows an int is an int, because the language grammar says it is.

like image 66
unquiet mind Avatar answered Dec 15 '22 05:12

unquiet mind


In your case A is a POD as well. To learn the correct definition of POD's take a look at this.

As far as your code is concerned, the compiler knows that int is a built-in type and doesn't have a constructor whatsoever.

Edit: Your question is rather strange. The compiler knows which type is a pod, and which isn't, also it knows which are built-in and not-built in because it is the compiler that compiles your code :) If the compiler didn't know that information, who would?

like image 30
Armen Tsirunyan Avatar answered Dec 15 '22 05:12

Armen Tsirunyan