Приветствую.
в проекте используется внешний аллокатор, путем глобальной перегрузки new/delete .
сейчас потребовалось добавить в проект дополнительную статическую библиотеку. и c ней возникла проблема — в VC++ 2013 есть бага, из-за которой приложение падает.
возможно ли как то делать, чтобы new/delete не заменялись в отдельно взятой библиотеке ?
Здравствуйте, Kswapd, Вы писали:
K>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.
Необязательно дублирование, можно что-то вроде mixin сделать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Kswapd, Вы писали:
K>>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.
Ops>Необязательно дублирование, можно что-то вроде mixin сделать.
т.е. реализовать класс, содержащий только перегрузку new/delete и наследовать его во всех нужных классах?
Здравствуйте, ctapmex, Вы писали:
C>возможно ли как то делать, чтобы new/delete не заменялись в отдельно взятой библиотеке ?
new и delete — это функции ::operator new и ::operator delete. Двух функций с одним и тем же именем быть не может, линкер такое не пропустит.
Можно оформить эту статическую библиотеку как DLL, то есть сделать DLL, которая экспоритрует те же функции, что и статическая библиотека. Просто обернуть каждую функцию из статической библиотеки в функцию с такой же сигнатурой, экспортируемой из DLL. DLL — это отдельный проект, и в нем можно вызывать иные ::operator new и ::operator delete. Правда, надо убедиться, что память, выделяемая в DLL, будет там же и освобождаться, а не где-то еще, иначе бед не избежать.
Здравствуйте, Kswapd, Вы писали:
K>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.
хорошо, переделаю на поклассовую. а как быть с классами из std ? с тем же std::vector ?
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, ctapmex, Вы писали:
C>>хорошо, переделаю на поклассовую. а как быть с классами из std ? с тем же std::vector ? K>Аллокатор сделай.