Моей программе на C++ нужен блок неинициализированной памяти и указатель void*
на этот блок, чтобы я мог передать его сторонней библиотеке. Я хочу передать управление временем жизни блока библиотеке, поэтому не хочу использовать std::vector
. Когда библиотека закончит работу с блоком, она вызовет обратный вызов, который я должен предоставить, и это освободит блок. В C я бы использовал malloc()
, а позже free()
.
В С++ я могу вызвать ::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