ㅎㅎ 반갑습니다.
C++이 정말 방대한 언어라는 걸 실감하는 중입니다.
부가 인자가 붙은 operator new는 new operator를 통해 동반 호출이 가능한 반면,
delete operator에는 부가 인자가 붙은 operator delete를 호출하는 문법이 없다는 것도 알았고요.
그리고 개인적으로는 new/delete와 new[]/delete[] 구분을 왜 넣었는지도 궁금합니다.
100바이트짜리 개체 하나를 선언할 때나, 24바이트 개체 4개를 선언할 때나 메모리 100바이트 할당이 일어나는 건 똑같지(원소 개수 4바이트 오버헤드 추가 포함), 둘을 구분할 필요는 없잖아요?
operator new[] 함수라고 해도 인자로 들어오는 건 총 바이트수 하나뿐이지, 배열 원소 개수가 들어오는 것도 아니고?
재주 님께서 말씀하신 건 new operator이고, 제가 얘기하는 건 new가 내부적으로 사용하는 메모리 할당 함수인 operator new 말입니다. ㅎㅎ 사실상 C의 malloc이나 다름없는 파트이죠.
new Twenty_Four_byte_Object[4];
라고 해 주면 new operator는 내부적으로 operator new[](100) 함수를 호출하고 (상술한 이유와 같이 24*4+4바이트)
앞에 4개라는 원소 개수를 써 넣은 뒤, 다음 24바이트 메모리 간격으로 Twenty_Four_byte_Object 클래스의 생성자 함수를 4회 호출해 주겠죠?
그 반면
new Hundred_byte_Object;
라고 하면 new operator는 내부적으로 operator new(100)을 호출하고 곧바로 Hundred_byte_Object 클래스의 생성자 함수를 하나 호출해 줍니다.
그래서 어차피 operator new나 operator new[]나 100바이트짜리 메모리를 할당하는 건 전혀 차이가 없고, operator new[]라고 해서 24나 4라는 정보를 따로 받는 것도 전혀 아닌데
두 함수를 구분할 필요가 있느냐는 게 요지입니다.