'declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception
A placement new is used for which there is no placement delete.
You could reproduce this error by defining the following class in a global namespace:
typedef unsigned int size_t;
class MemBuffer_t {
public:
void *Alloc(size_t);
};
MemBuffer_t memBuffer;
void *operator new(size_t size, MemBuffer_t &rBuffer)
{
return rBuffer.Alloc(size);
}
class X {
public:
X(int);
};
void f()
{
X *pX = new (memBuffer) X(10);
}
This warning will only occur if the user compiles the code with /GX, exception handling enabled.
The fix for the warning is to declare and/or define the following operator delete after you define your operator new:
void operator delete(void *pMem, MemBuffer_t &rBuffer);