Мы пытаемся перегрузить оператор delete [] конкретными аргументами. Как правильно это называть? Мы используем компилятор GNU и получаем ошибки компилятора со всеми этими примерами:
#include<memory>
using namespace std;
typedef unsigned int P;
struct A{
static allocator<A>m;
P p;
void*operator new[](size_t s){return m.allocate(s);}
void operator delete[](void*p,int s){m.deallocate((A*)p,s);}
void operator delete[](void*p,size_t t,int s){m.deallocate((A*)p,s);}
};
int main(){
A*a=new A[10];
//delete (5) []a; //expected ',' before 'a'
//delete[5]a; //expected ';' before ']' token
//delete[] (5) a; //type ‘int’ argument given to ‘delete’, expected
//delete[]a (5); //a’ cannot be used as a function
//delete[]((int)5)a; //type ‘int’ argument given to ‘delete’, expected pointer
//delete[]a((int)5); //‘a’ cannot be used as a function
return 0;
}
delete[] a;
- независимо от того, переопределили вы операторdelete[]
. - person Jonathan Potter   schedule 28.09.2014sizeof(A)
раз больше памяти, чем должен? См .: en.cppreference.com/w/cpp/memory/allocator/allocate < / а> - person Deduplicator   schedule 28.09.2014