Placement new

Istnieje wersja operatora new, która pozwala na konstruowanie obiektu w uprzednio zaalokowanej pamięci. Ta wersja nazywa się placement new. W przypadku operatora plecement new nie ma powodu do obawy, że zostanie rzucony wyjątek std::bad_alloc lub zwrócony wskaźnik o wartości NULL, ponieważ pamięć już została zaalokowana. Placement new wykonuje się szybciej niż inne wersje operatora new, ponieważ nie musi sie odwoływać do systemu operacyjnego w celu uzyskania pamięci.

#include <new>
#include <iostream>
 
using namespace std;
 
class Test
{
public:
  Test() { cout<< "Stworzono" <<endl; }
  ~Test(){ cout<< "Zniszczono" <<endl; }
};
 
int main()
{
  //nie rób tego w swoich programach!!!
  char p[sizeof(Test) ];  //prealokacja miejsca na stosie
  Test *pt = new (p) Test;  // placement new
 
  pt->Test::~Test(); // potrzebne jest jawne wywołanie destruktora
    // delete [] p jest niepotrzebne poniewaz zostalo zaalokowane na stosie
  return 0;
}
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License