Как перегрузить new/delete для тотдельного класса и всех подклассов?

Тема в разделе "WASM.BEGINNERS", создана пользователем dyn, 17 дек 2010.

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Привет. Есть класс. В нем другие классы.

    Код (Text):
    1. class cWASM
    2. {
    3. int a, b, c, d;
    4.  
    5. cUSERS   users;
    6. cADMINS admins;
    7. cCLERKCLONES clerk_clones;
    8. // ... etc
    9. };
    Для класса cWASM я хочу перегрузить new/delete, при чем так, чтобы это действовало и на все подклассы (cUSERS, cADMINS и т.д.)

    Как это можно сделать?
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    dyn
    В каком смысле - действовало?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    создайте новые операторы mynew и mydelete и используйте их для создания и удаления этих классов... чтобы не менять код, можно сделать #undef new #define new mynew в каком-нить хедере, и подключать его туда, куда нужно...
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    green
    Вот что я хочу.

    Мне нужно в операторы new/delete добавить некоторый код. Например такой:
    Хочу, чтобы такие перегруженные операторы выбрасывали массагу только при условии, если они вызвани внутри класса cWASM или его подклассах.
     
  5. Mentor

    Mentor New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2010
    Сообщения:
    67
    какое может быть new/delete для сUSERS если это член класса?
    Перегрузите new для cWASM, конструкторы дочерних классов и проверяйте, что конструктор вызывается из cWASM::new
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    dyn
    Что значит - быть вызванным внутри класса? Сформулируйте задачу в общепринятых терминах.
     
  7. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Сделай все три наследниками виртуального класса с перегруженными new/delete.
     
  8. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    В базовом классе перегрузите эти операторы. => наследникам они тоже будут доступны.