J'ai du code qui crée une file d'attente synchronisée que j'utilise dans une classe de collecte de données pour rapporter ses données. La méthode qui crée des files d'attente est kicking un avertissement:Est-ce que cela rapporte vraiment un addess local?
Queue^% DataGatherer::AddOutputQueue()
{
Queue^ outputQueue = Queue::Synchronized(gcnew Queue);
AddOutputQueue(outputQueue);
return outputQueue;
}
1> \ DataGatherer.cpp (21):. C4172 avertissement: adresse de retour de la variable locale ou temporaire
Est-ce une avertissement je devrais être inquiet ou suis-je en sécurité dans ce cas et c'est juste le compilateur se confondre Queue::Synchronized
renvoyant un Queue^
? Le code semble fonctionner correctement, mais les avertissements me rendent nerveux ;-)
Une idée de comment je peux obtenir la fonction pour renvoyer une référence que la classe DataGatherer et l'appelant peuvent utiliser? Je suis d'accord sur le fait que cela pourrait ne pas toujours fonctionner; c'était la raison principale pour laquelle j'ai posé la question :-) –
Pour retourner une référence, vous devez créer l'objet référencé sur le tas plutôt que sur la pile. Je ne vois pas pourquoi vous devriez faire cela, mais dans votre code, Queue^est une poignée qui, en quelque sorte, est une référence. – user231967
Corrigez-moi si je me trompe mais ce n'est pas ce que fait 'gcnew Queue'? AFAIU le bit syncronisé encapsule juste la classe sous-jacente pour le rendre threadsafe. Au moins, c'était mon intention ... –