est-ce légal ?:
Sample& sample = stack.front(); stack.pop_front();
3 Réponses :
Non, ce n'est pas légal. Vous devez prendre une copie de l'objet, c'est-à-dire utilisez si vous utilisez un std :: vecteur code>, le
pop_front code> appelle déplace Les éléments de l'emplacement et de votre référence indiquent à un élément différent (le deuxième deuxième élément de nouveau.) p> p>
Vous ne pouvez pas le faire facilement. Avec échantillon et exemple code>, vous avez délibérément demandé une référence, vous en avez donc une. Si la performance n'est pas critique, utilisez simplement
échantillon d'échantillon = code> ou (encore plus facile)
échantillon automatique = code> qui copiera-valeur par défaut. N'oubliez pas: C ++ est une langue d'expert et il est facile de se tirer dans le pied si vous ne faites pas attention.
En général, l'ajout et l'élimination des éléments vers / des conteneurs invalident les références à des éléments à l'intérieur du conteneur. Il existe des exceptions, mais à tout moment, vous voyez une référence à un élément dans un conteneur, vous devez vous inquiéter de cela. (Genre de comme à tout moment que vous voyez un appel à neuf code>, votre première question devrait être, où est le
correspondant code>?) Avec une petite expérience, il deviendra une habitude .
@Anteru Si la copie coûte cher, comment pouvons-nous utiliser référence?
Non, bien sûr pas. Une fois que vous avez supprimé l'objet de la collection, vous ne pouvez rien faire référence à votre référence. P>
Si de la norme: p>
std :: deque :: Itérateurs et pile code> basé sur
std :: deque code>. Exactement le même comportement pour
std :: vecteur code> et
std :: list code>. P>