не глобальная перегрузка new/delete
От: ctapmex  
Дата: 18.01.15 09:03
Оценка:
Приветствую.
в проекте используется внешний аллокатор, путем глобальной перегрузки new/delete .
сейчас потребовалось добавить в проект дополнительную статическую библиотеку. и c ней возникла проблема — в VC++ 2013 есть бага, из-за которой приложение падает.
возможно ли как то делать, чтобы new/delete не заменялись в отдельно взятой библиотеке ?
Re: не глобальная перегрузка new/delete
От: Kswapd Россия  
Дата: 18.01.15 09:28
Оценка:
Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.
Re[2]: не глобальная перегрузка new/delete
От: Ops Россия  
Дата: 18.01.15 09:35
Оценка:
Здравствуйте, Kswapd, Вы писали:

K>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.


Необязательно дублирование, можно что-то вроде mixin сделать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: не глобальная перегрузка new/delete
От: ctapmex  
Дата: 18.01.15 10:01
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Kswapd, Вы писали:


K>>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.


Ops>Необязательно дублирование, можно что-то вроде mixin сделать.


т.е. реализовать класс, содержащий только перегрузку new/delete и наследовать его во всех нужных классах?
Re: не глобальная перегрузка new/delete
От: Pavel Dvorkin Россия  
Дата: 18.01.15 11:42
Оценка:
Здравствуйте, ctapmex, Вы писали:

C>возможно ли как то делать, чтобы new/delete не заменялись в отдельно взятой библиотеке ?


new и delete — это функции ::operator new и ::operator delete. Двух функций с одним и тем же именем быть не может, линкер такое не пропустит.

Можно оформить эту статическую библиотеку как DLL, то есть сделать DLL, которая экспоритрует те же функции, что и статическая библиотека. Просто обернуть каждую функцию из статической библиотеки в функцию с такой же сигнатурой, экспортируемой из DLL. DLL — это отдельный проект, и в нем можно вызывать иные ::operator new и ::operator delete. Правда, надо убедиться, что память, выделяемая в DLL, будет там же и освобождаться, а не где-то еще, иначе бед не избежать.

Или в классе, как уже предлагали.
With best regards
Pavel Dvorkin
Re[2]: не глобальная перегрузка new/delete
От: ctapmex  
Дата: 20.01.15 06:54
Оценка:
Здравствуйте, Kswapd, Вы писали:

K>Глобальная перегрузка new/delete вообще зло. Нельзя ли переделать на локальную, поклассовую? Пусть будет дублирование кода, но несравненно надёжнее.


хорошо, переделаю на поклассовую. а как быть с классами из std ? с тем же std::vector ?
Re[3]: не глобальная перегрузка new/delete
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 20.01.15 06:58
Оценка:
Здравствуйте, ctapmex, Вы писали:

C>хорошо, переделаю на поклассовую. а как быть с классами из std ? с тем же std::vector ?

Аллокатор сделай.
Sic luceat lux!
Re[4]: не глобальная перегрузка new/delete
От: ctapmex  
Дата: 20.01.15 09:17
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, ctapmex, Вы писали:


C>>хорошо, переделаю на поклассовую. а как быть с классами из std ? с тем же std::vector ?

K>Аллокатор сделай.

точно, спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.