Моята C++ програма се нуждае от блок неинициализирана памет и void*
указател към този блок, за да мога да го предам на библиотека на трета страна. Искам да предам контрола върху живота на блока на библиотеката, така че не искам да използвам std::vector
. Когато библиотеката приключи с блока, тя ще извика обратно извикване, което трябва да осигуря и което ще освободи блока. В C бих използвал malloc()
и по-късно free()
.
В C++ мога да извикам съответно ::operator new
или ::operator new[]
и ::operator delete
или operator delete[]
по-късно:
void* newBlock = ::operator new( sizeOfBlock );
// then, later
::operator delete( newBlock );
Изглежда, че и ::operator new
, и ::operator new[]
имат абсолютно същия подпис и абсолютно същото поведение. Същото за ::operator delete
и ::operator delete[]
. Единственото нещо, което не трябва да правя, е да сдвоявам operator new
с operator delete[]
и обратното - недефинирано поведение. Освен това кой чифт да избера и защо?
std::vector<char>
, дяда дяда. - person GManNickG   schedule 23.03.2010