Это не прямой ответ на вашу проблему, но я думаю, что вы действительно ищете перегрузку для new
и delete
. Таким образом, вы можете контролировать управление памятью так, как вам нравится, и сохранять производственный код таким, какой он есть.
Вот пример, как это сделать: cppreference.com
#include <cstdio>
#include <cstdlib>
#include <new>
// replacement of a minimal set of functions:
void* operator new(std::size_t sz) {
std::printf("global op new called, size = %zu\n", sz);
void *ptr = std::malloc(sz);
if (ptr)
return ptr;
else
throw std::bad_alloc{};
}
void operator delete(void* ptr) noexcept
{
std::puts("global op delete called");
std::free(ptr);
}
int main() {
int* p1 = new int;
delete p1;
int* p2 = new int[10]; // guaranteed to call the replacement in C++11
delete[] p2;
}
Это также работает, если вы используете неявный вызов new
, например. изменение размера std::vector
.