Mój program C++ potrzebuje bloku niezainicjowanej pamięci i wskaźnika void*
do tego bloku, aby można go było przekazać do biblioteki innej firmy. Chcę przejąć kontrolę nad czasem życia bloku do biblioteki, więc nie chcę używać std::vector
. Kiedy biblioteka zostanie wykonana z blokiem, wywoła wywołanie zwrotne, które muszę dostarczyć, i które zwolni blok. W C użyłbym malloc()
, a później free()
.Którego użyć - "operator nowy" lub "operator nowy []" - aby przydzielić blok surowej pamięci w C++?
W C++ można też nazwać ::operator new
lub ::operator new[]
i ::operator delete
lub operator delete[]
odpowiednio później:
void* newBlock = ::operator new(sizeOfBlock);
// then, later
::operator delete(newBlock);
Wygląda zarówno ::operator new
i ::operator new[]
mają dokładnie taką samą sygnaturę i dokładnie takie samo zachowanie. To samo dotyczy ::operator delete
i ::operator delete[]
. Jedyne, czego nie powinienem robić, to parowanie operator new
z i na odwrót - niezdefiniowane zachowanie. Poza tą parą, którą wybieram i dlaczego?
Zakładam, że wiesz, że powinieneś użyć 'std :: vector', yadda yadda. –
GManNickG
Dlaczego myślisz, że przy std :: vector nie masz kontroli nad czasem życia obiektu? –
Pytanie jest niejasne. Czy masz kontrolę nad dealokacją, czy przekazujesz tę odpowiedzialność do biblioteki? Wszystkie odpowiedzi sprzed edycji nie uwzględniają zmodyfikowanych wymagań. –