3

Possible Duplicate:
C++'s “placement new”

in the below code what does Line 3 represents, is it the way of typecasting? or what

 void someCode()
 {
   char memory[sizeof(Fred)];     // Line #1
   void* place = memory;          // Line #2

   Fred* f = new(place) Fred();   // Line #3
   // The pointers f and place will be equal

   ...
 }
Community
  • 1
  • 1
Naruto
  • 9,476
  • 37
  • 118
  • 201
  • This doesn't work because of alignment requirements. The `Fred` type might require stricter alignment than `char`. You should use `aligned_storage` instead, available in C++11 and TR1. – Derek Ledbetter Apr 05 '12 at 18:30

1 Answers1

3

This is a typical usage of Placement new.
It allows you to allocate memory and then construct objects at that particular memory location.

Line #3 essentially just calls the constructor Fred::Fred(). The this pointer in the Fred constructor will be equal to place. The returned pointer f will therefore be equal to place.

Alok Save
  • 202,538
  • 53
  • 430
  • 533
  • Hey Als, thanks for your response...how can this pointer i.e pointer to Fred will be equal to void*?, – Naruto Apr 05 '12 at 18:08
  • @LLL: This is what the implementation of placement new does for you.It assigns the address of `place` to `f`. This is a functionality provided by the placement new. – Alok Save Apr 05 '12 at 18:10
  • Thnx for clarification.. this s wat i wanted.. – Naruto Apr 05 '12 at 18:11