map
и stack
явно вызывают delete yourObject
под капотом, для большинства определений «явных» - вот почему ваш оператор удаления вызывается.Эти удаления не менее законны, чем те, что в вашем коде.
Кстати, как вы узнаете имя файла и номер строки?Помните, что __FILE__
и __LINE__
, вероятно, не будут работать.Они вернут имя файла и номер строки, по которой они найдены, то есть вы получите местоположение вашего delete
метода, а не местоположение вызывающей стороны .
Чтобы получить желаемое поведение, регистрируя только «явные» удаления и отслеживая их местоположение, вам нужно заменить удаления, которые вы хотите зарегистрировать, на вызовы макросов.В этом случае вам не нужно переопределять delete
.Например:
#define DELETE(p) \
do { \
std::cout << __FILE__ << ":" << __LINE__ << ": " << p << std::endl; \
delete p; \
}