2017-01-14 2 views
2

Je crée (alloue) "à la volée" un nombre complexe en le passant à une fonction exp(). Code entier:Est-ce que cet objet passant "à la volée" souffrirait d'une fuite de mémoire?

std::complex<double> resZeros(0.0, 0.0); 
resZeros = a0 * std::exp(std::complex<double>(0.0, -0 * freq * 2 * M_PI)); 

Cela va-t-il introduire une fuite de mémoire? En fait je ne détruis pas manuellement std::complex<double>(0.0, -0 * freq * 2 * M_PI).

Ou est std::complex assez intelligent pour le supprimer quand il est hors de la portée?

+1

Si vous ne l'avez pas créé avec du nouveau, vous n'avez pas besoin de le supprimer. –

+1

Je ne comprends pas la downvote: il n'y a rien de mal à éclaircir la confusion personnelle par une question bien écrite. – Bathsheba

Répondre

2

Non c'est bien: std::complex<double>(0.0, -0 * freq * 2 * M_PI) est un anonyme temporaire et le standard C++ est très spécifique en disant qu'il "vit" aussi longtemps que l'instruction; conceptuellement le destructeur à std::complex est appelé juste après l'affectation à resZeros.

Les temporaires temporaires ne provoquent pas de fuite de mémoire.