Vikas
Vikas

Reputation: 179

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?

Upvotes: 4

Views: 114

Answers (2)

Armen Tsirunyan
Armen Tsirunyan

Reputation: 133014

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?

Upvotes: 6

unquiet mind
unquiet mind

Reputation: 1112

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.

Upvotes: 7

Related Questions