c ++ связать временные выделения в функции с пользовательским распределителем? - PullRequest
1 голос
/ 05 апреля 2010

В настоящее время я работаю над некоторыми простыми пользовательскими распределителями в c ++, которые обычно уже работают. Я также перегружал операторы new / delete для выделения памяти из моего собственного распределителя. В любом случае, я сталкивался с некоторыми сценариями, в которых я действительно не знаю, откуда берется память:

    void myFunc(){
          myObj testObj();
          ....do something with it
    }

В этом случае testObj будет действителен только внутри функции, но откуда берется его память? Можно ли как-нибудь связать его с моим распределителем? Должен ли я создать объект, используя new и delete, или есть другой способ?

Спасибо

1 Ответ

4 голосов
/ 05 апреля 2010

(myObj testObj(); объявляет функцию с именем testObj, которая возвращает myObj. Вместо этого используйте myObj testObj;.)

Память поступает из стека. Он будет auto -матически уничтожен при выходе из области видимости.


Чтобы использовать new и delete, вы, конечно, должны позвонить new и delete:

myObj* p_testObj = new myObj;
...
delete p_testObj;

Но распределение в стеке является наиболее эффективным, поскольку оно включает только 1 инструкцию sub esp, ??. Я не вижу смысла использовать пользовательское распределение, если myObj не огромен.

...