Vous êtes sans doute déjà au courant, mais bon, au cas ou :
Le retro ingéniering c++ ignore les nouveaux types de pointeurs (&&) et les considère comme des erreurs, ce qui le conduit à ignorer l'argument auquel il s'attache, ainsi que le corps de la fonction. Ce corps est remplacé par celui d'une autre (pour l'instant je ne l'ai utilisé que dans un constructeur de copie et il est remplacé par celui du constructeur par défaut) .
Pour rappel, ce nouveau symbole représente les arguments passés par référence lorsque ladite référence pointe sur une rvalue. Dans mon utilisation cela permet d'éviter les copies profondes en particulier lors des retours de fonctions.
- Code: Select all
class A {
int *i = nullptr;
A() {}
A( const A &a ) : i(a.i ? new int(*a.i) : nullptr) {} // constructeur de copie normal OK
A( A &&a ) : i(a.i) { a.i=nullptr; } // constructeur de copie 'rapide' --> non reconnu par la rétro ingéniérie. on se retrouve avec un deuxieme A() {}
...
};
Cordialement,
Marc