Dans le cadre qt, la plupart des signaux de bibliothèque et des logements utilisent des pointeurs comme paramètres. Je me demandais, Si je crée une "structure" de slot de signal qui prend une référence comme paramètre au lieu du pointeur, le paramètre entier sera-t-il copié, ou juste 4 bytes (système de 32 bits) comme dans une référence C++ normale?Signal Qt et slots: les arguments de référence sont-ils copiés?
Je pose cette question parce que j'ai remarqué quelque chose quand je crée une méthode de signal/slot avec le paramètre de référence. Quand je les ai ensuite, le mécanisme de saisie semi-automatique dans QTCreator ne me fait pas allusion aux paramètres de référence comme il le ferait avec les paramètres du pointeur. Il me fait signe avec le paramètre régulier. Par exemple:
Je crée un signal et la fente:
...
signals:
void mySignal(int& parameter);
private slots:
void on_mySignal(int& parameter);
je tente ensuite de les connectés et Qt ne marche pas ajouter &
pour référence dans le paramètre:
...
connect(this, SIGNAL(mySignal(int)), this, SLOT(on_mySignal(int)));
Je dois changer manuellement :
connect(this, SIGNAL(mySignal(int&)), this, SLOT(on_mySignal(int&)));
Ainsi je me demande, fait référence même travailler avec le signal/s lot? J'apprécierais toute aide.
Votre prémisse est erronée. Les références C++ régulières n'ont pas de taille car ce ne sont pas des objets. Vous ne pouvez pas, par exemple, utiliser 'sizeof' pour obtenir la taille d'une référence. En outre, vous devez arrêter d'utiliser la syntaxe de signal/emplacement obsolète. La syntaxe correcte est 'connect (this, & Class :: mySignal, this, & Classe :: on_mySignal);' ce qui évite de devoir vous en préoccuper. – nwp
Je comprends, merci. Mais pour répondre à la question principale: Si vous utilisez des signaux/slots avec référence, est-ce qu'une grande quantité de données est copiée? – Bremen
Je m'attendrais à une copie du 'int' même si vous avez spécifié un' int & '. Vous pouvez tester cela en assignant à l'argument dans l'emplacement et voir si le paramètre que vous avez passé a changé. – nwp