![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
как заставить работать такой макрос не только для простых типов данных, но и для массивов и для классов?
#define SAFENEW(ptr,tp) do { TRY { ptr = new tp; } CATCH(CMemoryException,e) { e->Delete(); } END_CATCH if(ptr) { break; } Sleep(MEM_REALLOC_DELAY); } while(1); SAFENEW(pInt, int) SAFENEW(aInt, unsigned int[BUF_LEN + 20]) SAFENEW(pMyClass, MyClass()) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Это не тот случай, когда стоит пользоваться макросом. Напиши функцию (функции) - в отличие от макроса функции допускают перегрузку и гораздо безопаснее.
-------------------- ... |
|||
|
||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
В этом случае возникает та же проблема - передача типа данных. Простой тип нормально передается через шаблон "Type* SafeNew<Type T>();" Но если требуется вызов конструктора типа "MyClass()", или что-то типа "unsigned int[BUF_LEN + 20]" не катит. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
А что, так не работает? Это сообщение отредактировал(а) azesmcar - 16.1.2007, 10:48 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |