We can use placement new operator to allocate an object on appointed memory.
For example:
char* buf = new char[1000];
Object* pobj = new(buffer)Object();
The object will use the buf space instead of allocate a new memory space. But the constructor will still be called.
BTW:
If you create NUM of objects by calling new[] operator. It will allocate sizeof(object) * NUM+ sizeof(int) bytes memories.
NUM will be strored at the begin of allocated memories. That's why the extra 4 byted allocated.
When delete[] is called. The destructor will be called NUM times(If you manually change this NUM, you'll see it).
If a class has no destructor, the extra 4 bytes space won't be allocated.