به اون placement new میگن .
کارش اینه که شما یک اشاره گر حافظه بهش میدید اون سازنده کلاس رو در اون محل صدا میزنه .
کد زیر رو در نظر بگیرید :
void* ptr = ::operator new(sizeof(A));
::new(ptr)A();
کد بالا معادل این هست :
A* ptr=new A;
تابع template ای هم که نوشتید دقیقا همین کار رو انجام میده البته قسمت new کردن قبل از صدا زدن تابع انجام شده و اشاره گر به حافظه new شده که همون _Ptr هست به تابع فرستاده میشه .
کاربردی هم که این سبک new کردن داره اینه که با این روش شما می تونین توابع مربوط به گرفتن حافظه رو از قسمت مربوط به صدا زدن سازنده جدا کنید .
که هم داخل allocator های container های ++C ازش استفاده شده .
و هم با استفاده از این روش میشه memory pool نوشت .