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; }
wersja strony: 1, ostatnia edycja: 07 Dec 2009 20:03