2010-03-11 22 views
1

J'ai une fonction qui prend un const D3DVECTOR3 *pos, mais je n'ai aucune raison de le déclarer à l'avance. La solution la plus logique me utilisait nouveau:Comment déclarer un pointeur vers une variable en tant que paramètre d'une fonction en C++?

Function(
    //other parameters, 
    new D3DXVECTOR3(x, y, 0)); 

mais je ne sais pas comment je m'y prendrais deleting il, beign intitialized dans une fonction. Ma pensée suivante était d'utiliser l'opérateur &, comme ceci:

Function(
    //other parameters, 
    &D3DVECTOR3(x, y, 0)); 

mais je ne sais pas si cela est un moyen valable d'aller sur le faire. (Il n'y a pas d'erreur, mais il y a beaucoup de choses qui ne donnent pas d'erreurs qui ne sont pas forcément bonnes). Alors devrais-je utiliser new, &, ou une autre technique que je néglige?

+0

Si vous ne recevez pas d'erreur pour 'int * x; x = 50; 'alors je n'ai aucune idée du genre de compilateur que vous utilisez. Ce n'est certainement pas un compilateur C++ ... – AnT

+0

@Andrey - Oui, je vois maintenant; J'essayais de donner un exemple de tout ce qui pourrait être fait sans erreurs, mais n 'a pas nécessairement une bonne pratique. Je le change maintenant. –

Répondre

5

Il n'est pas possible d'invoquer directement l'opérateur d'adresse du temporaire (MSVC vous dira que ce n'est pas le standard C++ à des niveaux d'avertissement plus élevés, aussi). Sauf que vous pouvez le faire

Function(
//other parameters, 
&(D3DXVECTOR3 const&)D3DXVECTOR3(x, y, 0)); 

Mais c'est dégoûtant. Déclarez simplement une variable locale et transmettez son adresse.

+0

Pourriez-vous élaborer sur la différence entre '& (D3DXVECTOR3 const &) D3DXVECTOR3 (x, y, 0)' et '& D3DVECTOR3 (x, y, 0)'? –

+0

@ Keand64, Vous ne pouvez pas prendre l'adresse du temporaire. Mais une fois que vous liez le temporaire à une référence, la référence garantira le '&' que l'opérande a une adresse (il peut copier le temporaire à un certain endroit), et l'opération réussira. –

0

Je ne vois aucune raison de ne pas instancier l'objet avant l'appel de la fonction, puis de le supprimer par la suite. A noter également,

Function(
//other parameters, 
new D3DXVECTOR3(x, y, 0)); 

Je pense que cela se traduira par une fuite de mémoire si la fonction ne retourne pas un pointeur ou le déposer dans une sorte de pool de mémoire. J'espère que cela t'aides.