Перегрузка оператора new


Это может быть наивный вопрос, но каковы опасности следующий код (выделить больше памяти оператор new для инфо-структуры)?

struct Info
{
        Info():nLineNo(0){memset(cFile, 0, 256);}
        ~Info(){}
        char cFile[256];
        unsigned int nLineNo;
};


void *operator new(size_t Size, const char *pcFile, const unsigned int nLine)
{
        Info *pData = 0;

        pData = (Info*)malloc(Size + sizeof(Info));

        strcpy(pData->cFile, pcFile);

        pData->nLineNo = nLine;

        return (void*)pData;
}


void operator delete(void *pData)
{
        Info *pInfo = (Info*)pData;
    // could use pInfo->nLineNo to check for it within hash table of allocated blocks - just an example
        free(pData);
}


283
5
задан 26 августа 2011 в 12:08 Источник Поделиться
Комментарии
1 ответ

Вы не правильно перегружать оператор new.

Посмотреть: как следует записать ISO C++ стандартный совместимые пользовательские операторы new и delete?

Но вы не должны перегружать новый вообще.
Всю работу вы делаете здесь материал, который идет в конструкторе.

Единственная работа оператор new для выделения памяти (инициализация).

Как Примечание стороны:

Хотя вы на самом деле можете добавлять параметры на новые.
Это не очень хорошая идея.
Как это не нормально, и таким образом делает его труднее поддерживать.

Приведенный выше код будет вызываться, если вы:

// Note: The first parameter (ie size) will be auto inserted as the first parameter.
Info* data = new ("File Name", 12) Info;

3
ответ дан 26 августа 2011 в 12:08 Источник Поделиться