Можно ли вызвать оператор new "динамически" ?

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 19 фев 2012.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    В msvcrt.dll есть такое вот - "void * __cdecl operator new(unsigned int)" Его реально полноценно заюзать? Мне хочеться сделать все вызовы CRT ф-ций динамическими,т.е. с функциями то понятно все как.А вот как быть с оператором?? Хочеться использовать возможности С++ при отсутствии в импорте црт библиотек.
    Можно ли как то на вижуал студии данный изврат провернуть?
     
  2. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Код (Text):
    1. void * __cdecl operator new(unsigned int size) {
    2.  
    3.    return ::malloc(size);
    4.  
    5. }
     
  3. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    токо потом не забыть вызвать конструктор, передав ссыль на буфер через есх
     
  4. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    А памяти то сколько для класса выделять? sizeof правильно покажет?
     
  5. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    по идее да. еще можно переопределить new. хотя, я не знаю что и зачем вы творите
     
  6. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Здрасте. Не надо никого звать руками. Конструктор и так будет вызван.
     
  7. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Не надо извращений.

    Код (Text):
    1. MyDumbClass* p = new MyDumbClass();
    Если переопределен оператор new, то и sizeof тут не нужен, и конструктор правильный вызовется.
     
  8. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Как побороть?
    ЗЫ:студия бесит неявным впихиванием memset
    ЗЫЫ:
    что я делаю не так?
    Код (Text):
    1. typedef void * (__cdecl *_malloc_)(_In_ size_t _Size);
    2. _malloc_ dyn_malloc;
    3. typedef void   (__cdecl *_free_)(_Post_ptr_invalid_ void * _Memory);
    4. _free_ dyn_free;
    5. /*................................................................................................*/
    6. HMODULE crt=LoadLibrary(L"msvcrt.dll");
    7. dyn_malloc=(_malloc_)GetProcAddress(crt,"malloc");
    8. dyn_free=(_free_)GetProcAddress(crt,"free");
    при попытке освободить память.В отладчике студии вываливает такое:
    Это что такое?CRT куча "неправильная" ?Из за цртшной точки входа что ли?
     
  9. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    В настройках проекта выставить опцыю "ignore all default libraries"
     
  10. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    Ursus
    я без понятия чего ТС творит. думал, что он хочет классы из С создавать
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Что то невыходит:
    Пытаюсь переопределить только для одного namespace и в нем же заюзать.
     
  12. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Полностью кот в студию.