Je suis en train d'écrire une classe template et à un moment de mon code, j'aimerais pouvoir initialiser un objet du type paramétré sur la pile. Pour l'instant, j'y parviens en écrivant quelque chose comme ceci :
template <typename T> void MyClass<T>::doSomething() {
T valueInitialized = T();
/* ... */
}
Ce code fonctionne, mais (à moins que le compilateur ne soit intelligent) il nécessite la création et la destruction inutiles du fichier temporaire T
objet. Ce que je voudrais écrire est ce qui suit, que je sais être incorrect :
template <typename T> void MyClass<T>::doSomething() {
T valueInitialized(); // WRONG: This is a prototype!
/* ... */
}
Ma question est de savoir s'il existe un moyen efficace d'initialiser la valeur de l'objet automatique sans avoir à construire explicitement un objet temporaire et à l'assigner à l'objet automatique. Est-ce possible ? Ou est-ce que T var = T();
aussi bon qu'il puisse l'être ?
0 votes
Bonne question :) (Bien que vous devriez savoir qu'il ne faut pas remercier dans un corps de question !)
0 votes
Par curiosité, en quoi cela pose-t-il problème ? Si
T
est un type défini par l'utilisateur, il doit avoir un constructeur par défaut. S'il s'agit d'un type intrinsèque, la perte de performance due à la construction par copie devrait être négligeable. Même en supposant que le compilateur ne l'optimisera pas.0 votes
@Maxpm- C'est surtout par curiosité. J'ai toujours utilisé l'option
T var = T();
et s'est dit qu'il y avait probablement une façon plus propre de procéder. Vous avez tout à fait raison de dire que l'impact sur les performances devrait être négligeable.0 votes
Également en lien : stackoverflow.com/questions/2671532/