3

What is the difference between: new int*[] and new (int*)[]:

int** pA = new int*[2] // returns a pointer to an array of pointers to int.

new (int*)[2] // what should this return ? Shouldn't it be same as the above. 

Likewise,

float* pB1 = new float[3]; // compiles successfully.

float* pB2 = new (float)[3] //Gives an error. Shouln't it return an array of floats ?

But, the compiler says:

A value of type 'float' cannot be used to initialize a value of type float* .

What am I missing here? I'm using VS2015 Community IDE.

NathanOliver
  • 171,901
  • 28
  • 288
  • 402
  • you are requesting a placement new; the call is understood as a pointer passed to new; see https://stackoverflow.com/questions/222557/what-uses-are-there-for-placement-new – OznOg Oct 11 '17 at 18:58
  • http://en.cppreference.com/w/cpp/language/new – Barry Oct 11 '17 at 19:00
  • 1
    @OznOg, you should expand the comment to a full fledged answer. – R Sahu Oct 11 '17 at 19:00
  • Don't forget to use Standard Library containers like `std::vector` whenever possible and avoid manually allocating with `new`. – tadman Oct 11 '17 at 19:06

1 Answers1

6
float* pB1 = new float[3];

is allocating an array of float

float* pB2 = new (float)[3]

is asking to allocate an array of ?? in 'float' location (which is meaningless), that's the error you get. This is the placement new syntax, see more info here Difference between new (float*)[] and new float*[] or http://en.cppreference.com/w/cpp/language/new as pointed in comments

OznOg
  • 4,440
  • 2
  • 26
  • 35