[C++, gcc4.7] Как перегрузить new, delete?
ты точно линкуешь aloc.o? У меня все работает без всяких ухищрений, даже h-файл создавать не надо.
компоновщик не включал alloc.o, теперь все работает
даже h-файл создавать не надоэто потому что компилятор сам автоматически включает аналогичный заголовок для каждого сорса?
для new ведь не нужен никакой заголовок, это фича языка, компилятор сразу знает эти операторы, а определение, какой на самом деле используется, как раз и происходит во время линковки.
Я тебя сразу на всякий случай предупрежу: если делаешь so'шку, то надо из нее стрипать потом эти символы, чтобы в другие проги твои операторы не подгружались. Просто это аццкие грабли.
То что я делаю это эксперимент. В операторах delete помещают пустоту, чтоб он ничего не делал, для того чтоб доказать что причину memory corruption в кое каком ужасном C/C++ коде таиться не в неправильном использовании new/delete, что я уже сделал.
В данном случай valgrind не работает, потому что использую Python из которого загружаю библиотеку .so C++
Кстати, почему компилятор не допускает чтоб я переопределил эти операторы в сustom namespace?
не знаю, наверное, потому что в этом нет смысла. Или ты хочешь, чтобы им создавались все типы, которые там описаны? Такого маханизма в плюсах нет, если хочешь такую функциональность, надо переопределять в каком-нибудь классе и от него наследоваться.
А может быть malloc_hook(3)?
Оставить комментарий
Ventalf
В проекте у меняaloc.h
aloc.cpp
aloc.h cостоит из
alloc.cpp содержит реализацию операторов.
Делаю
в каждом исходнике в последнем месте среди "include" -ов
В результате компилация с g++ 4.7.0 проходит успешно, но почему то компоновщик берет ссылку на стандартный оператор вместо моих.
Вопрос в следующем, как заставить компилятор использовать мои операторы new/delete?