Add placement new/placement delete

This commit is contained in:
smallmodel 2025-02-18 20:54:24 +01:00
parent a5bb4c1874
commit a1d47cf64a
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
2 changed files with 33 additions and 5 deletions

View file

@ -526,3 +526,18 @@ void Container<Type>::Copy(const Container<Type>& container)
return;
}
template<typename T>
void *operator new(size_t count, Container<T>& container)
{
(void)count;
assert(count == sizeof(T));
return &container.ObjectAt(container.AddObject());
}
template<typename T>
void operator delete(void *ptr, Container<T>& container)
{
container.RemoveObject((T *)ptr);
}

View file

@ -26,14 +26,27 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "q_shared.h"
class LightClass {
class LightClass
{
public:
#ifndef _DEBUG_MEM
void* operator new(size_t);
void operator delete(void*);
void *operator new(size_t);
void operator delete(void *);
void* operator new(size_t size, void* placement);
void operator delete(void* ptr, void* placement);
void *operator new(size_t size, void *placement);
void operator delete(void *ptr, void *placement);
template<typename T>
void *operator new(size_t size, T& placement)
{
return operator new(size, (void *)&placement);
}
template<typename T>
void operator delete(void *ptr, T& placement)
{
return operator delete(ptr, (void *)&placement);
}
#endif
};