FANDOM


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;
}

Zobacz rowniez:

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki