На самом деле вам нужно задать нам реальный вопрос :-) Для вас очевидно, почему вы считаете это необходимым, но это почти наверняка не . На самом деле, это почти всегда плохая идея.
Почему вы думаете, что вам нужно это сделать?
Я обычно нахожу это потому, что разработчики хотят удалять или не удалять объект в зависимости от того, где он был размещен, но это то, что обычно следует оставить клиенту вашего кода, а не самому коду.
Обновление:
Извинения, вы, вероятно, нашли одну из немногих областей, в которых смысл того, что вы спрашиваете, имеет смысл. В идеале вы должны переопределить все операторы выделения и выделения памяти, чтобы отслеживать, что создается и удаляется из кучи.
Однако я не уверен, что это просто вопрос перехвата new / delete для класса, поскольку могут быть ситуации, когда delete
не вызывается и, поскольку mark / sweep зависит от количества ссылок, вам необходимо уметь перехватывать назначения указателей, чтобы он работал правильно.
Вы думали о том, как вы собираетесь с этим справиться?
Классический пример:
myobject *x = new xclass();
x = 0;
не приведет к вызову удаления.
Кроме того, как вы обнаружите тот факт, что указатель на один из ваших экземпляров находится в стеке? Перехват new и delete может позволить вам сохранить, является ли сам объект основанным на стеке или куче, но я не знаю, как вы скажете, куда будет назначен указатель, особенно с таким кодом:
myobject *x1 = new xclass(); // yes, calls new.
myobject *x2 = x; // no, it doesn't.