I have encountered the following code:
class a {
public:
void * operator new(size_t l, int nb);
double values;
};
void *a::operator new (size_t l,int n)
{
return new char[l+ (n>1 ? n - 1 : 0)*sizeof(double)];
}
From what I get it is then used to have an array like structure that start at “values”:
double* Val = &(p->a->values) + fColumnNumber;
My question is :
is there a memory leak? I am very new to overloading new operator, but I’m pretty sure that the memory allocated is not deallocated properly. Also does that mean I can never create a “a” class on the stack?
thanks
I believe it technically produces UB as it is, though it’s a form of UB that will probably never cause a visible side effect (it’s using
new [], but I believe that’ll get matched up withdelete— but forchar, this usually won’t cause a visible problem).IMO, it’s almost worse that it’s using a new expression to allocate what should really be raw bytes instead of objects. If I were doing it, I’d write it like:
You’d match that up with: