2010-04-04 1 views
1

Je travaille actuellement sur quelques allocateurs personnalisés simples en C++ qui fonctionnent généralement déjà. J'ai également surchargé les opérateurs new/delete pour allouer de la mémoire à partir de mon propre allocateur. Quoi qu'il en soit, je suis tombé sur des scénarios où je ne sais pas vraiment où la mémoire vient comme ceci:C++ lier les allocations temporaires en fonction de l'allocateur personnalisé?

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

Dans ce cas TestObj ne serait valable que dans la fonction, mais où serait sa mémoire venir? Y at-il de toute façon que je puisse le lier à mon allocateur? Devrais-je créer un objet en utilisant new et delete ou existe-t-il un autre moyen?

Merci

Répondre

4

(myObj testObj(); Déclare une fonction nommée testObj qui retourne un myObj. Utilisez myObj testObj; à la place.)

La mémoire provient de la pile. Il sera auto - détruit automatiquement en quittant la portée.


Pour utiliser votre new et delete vous devez d'appel de cours new et delete:

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

Mais l'allocation sur la pile est le plus efficace car il implique seulement 1 instruction sub esp, ??. Je ne vois pas de raison d'utiliser l'allocation personnalisée à moins que myObj soit énorme.

+0

Les parenthèses après testObj ne sont-elles pas aussi valides? –

+0

Je demande juste parce que je veux allouer toute ma mémoire dans un endroit. Je vais probablement utiliser nouveau/supprimer alors. et ce que j'ai écrit n'est pas une fonction mais un simple appel au constructeur :) – moka

+1

@Matti: oui, mais pas ce que vous voulez: http://www.parashift.com/c++-faq-lite/ctors.html#faq -10.2 – kennytm

Questions connexes