Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наследование класса.вызов функции перед, конструктором наследующего класса 
V
    Опции темы
Lazin
Дата 16.10.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



я так понял, что функция, которую нужно вызвать до вызова конструктора, имеет отношение к менеджеру памяти
если это так, то стоит перегрузить операторы new - delete для объектов, использующих менеджер памяти

Код

class A: public B
{
    A(int gggg) : B()
    {
        //null
    }
    ~A()
    {
        // null
    }
    void* operator new (size_t sz)
    {
        //при вызове этой ф-ии конструктор объекта еще не вызван
        return malloc(sizeof(A));
    }
    void operator delete (void* p)
    {
        free(p);
    }
    void* operator new (size_t sz, std::nothrow)
    {
        //при вызове этой ф-ии конструктор объекта еще не вызван
        return malloc(sizeof(A));
    }
    void operator delete (void* p, std::nothrow)
    {
        free(p);
    }
    void* operator new[] (size_t sz)
    {
        //при вызове этой ф-ии конструктор объекта еще не вызван
        size_t obj_count = sz/sizeof(A);
        return malloc(sizeof(A)*obj_count);
    }
    void operator delete[] (void* p)
    {
        free(p);
    }
};

тут нужно вызовы malloc - free, заменить функциями своего менеджера памяти, и не забывать, что во время вызова new, объект еще не существует

PM MAIL Skype GTalk   Вверх
DarkKnight
Дата 16.10.2008, 13:40 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



Код

#include "iostream"

struct Base
{
    Base(int a)
    {
        std::cout << "Base = " << a << std::endl;
    }
};

struct Derived: public Base
{
    Derived(): Base(foobar(777))
    {
        std::cout << "Derived" << std::endl;
    }
protected:
        static int foobar(int a)
    {
        std::cout << "Foobar = " << a << std::endl;
                return a;
    }
};

int main()
{
    Derived d;
    return 0;
}


кул,толкьо у меня,с хавоком это не прокатило.может потому что он в .lib может еще почему-то,я хз.щас начнется "вот,ты лол!"...скачайте хавок и сами попробуйте.

Код


#ifndef HW_MAIN_H
#define HW_MAIN_H

namespace HavokWrapper
{

    class hwMemManager
    {
    public:
        hwMemManager();
        ~hwMemManager();
        void deAllocate(void);
    protected:
        hkPoolMemory* _memoryManager;
        hkThreadMemory* _threadMemory;
        char* _stackBuffer;

        /*
            Функция вывода ошибок
        */
        static void HK_CALL _errorReport(const char* msg, void*)
        {
            printf("%s", msg);
        }
    };

    hkpWorldCinfo _defaultWorldInfo;
    static hwMemManager* memMngr;

    class hwWorld : public hkpWorld
    {
    public:
        hwWorld(hkpWorldCinfo &winfo = _defaultWorldInfo);
        void releaseWorld(void);
        ~hwWorld();

        static hkpWorldCinfo _ppc_ml9(hkpWorldCinfo &na_nah)
        {
            std::cout << "zaebis" << std::endl;
            memMngr = HK_NULL;
            memMngr = new hwMemManager();
            return na_nah;
        }
    };
    

hwWorld::hwWorld(hkpWorldCinfo &winfo)
            : hkpWorld( _ppc_ml9(winfo) )
{
    std::cout << "zaebis" << std::endl;
}

hwWorld::~hwWorld()
{
    releaseWorld();
}

/*
    Полное уничтожение Мира
*/
void hwWorld::releaseWorld(void)
{
    markForWrite(); 
    removeReference();
}
    
};

#endif // HW_MAIN_H




скажи,люди добрые,что я сделал не так?

Это сообщение отредактировал(а) DarkKnight - 16.10.2008, 13:49
PM MAIL ICQ   Вверх
mes
Дата 16.10.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(DarkKnight @  16.10.2008,  13:40 Найти цитируемый пост)

скажи,люди добрые,что я сделал не так?

а какой результат выполнения ? 


--------------------
PM MAIL WWW   Вверх
DarkKnight
Дата 16.10.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



Цитата(mes @  16.10.2008,  14:08 Найти цитируемый пост)
а какой результат выполнения ? 


результат выполнения - вылет,а в консоли пусто,кроме "Xors3D engine loaded!".
PM MAIL ICQ   Вверх
Daevaorn
Дата 16.10.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



DarkKnight, что за компилятор?

Добавлено через 26 секунд
И где весь код?
PM MAIL WWW   Вверх
DarkKnight
Дата 16.10.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



компилятор MSVS 2008.
весь код у меня на винте)))а этого не достаточно?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.