Referenz auf konstantes Object als lvalue vs operator=
-
Hallo zusammen,
ich habe hier gerade eine kleines Problem, bei dem ich zwar sofortige Abhilfe (*) hätte, es würde mich aber interessieren, ob mein erster Weg doch irgendwie zu bewerkstelligen wäre.
Es geht um ein (DI)-Bitmap-Objekt, das natürlich aus verschiedenen Dateitypen geladen werden kann. Eben auch animierte gifs, die eben aus mehreren Bildern bestehen:class A { ... DIB m_image; // DIB Klasse für einzelnes Bitmap (aus jpg, png, bmp etc.) std::vector<DIB> m_Images; // für animierte Dateiformate const DIB& m_displayDib; // Referenz auf das momentan anzuzeigende DIB };displayDib wird im Kontruktor natürlich auf m_image gesetzt. Wenn jetzt jedoch der vector m_Images die verschiedenen Bilder hält, gibt es ein Problem mit dem operator= von DIB:
int Tick() { ... m_displayDib = m_images[m_currImage]; ... }Meine Frage daher, ist es irgendwie möglich MSC 09 davon zu überzeugen, dass er nur die Referenz auf m_images[m_currImage] zuweist?
* Oder ist es nur möglich, wenn m_displayDib ein const DIB* ist?
-
Wnn Du
m_displayDibconst machst mußoperator=()naturgemäß scheitern.
-
Caligulaminus schrieb:
Wnn Du
m_displayDibconst machst mußoperator=()naturgemäß scheitern.Danke für die Antwort, aber ich will ja in diesem Fall nicht kopieren, sondern m_displayDib lediglich die Adresse des momentan anzuzeigenden Bildes zuweisen.
Es geht mir ja lediglich darum, ob dies generell möglich sei. Die Abhilfe wäre wie geschrieben der Zeiger.
-
Eine Referenz ist fix. => Zeiger.
-
Wenn Du alle Bilder im
vectorhast könntest Du statt eines Zeigers u.U. einfach den Index nehmen...
-
Caligulaminus schrieb:
Wenn Du alle Bilder im
vectorhast könntest Du statt eines Zeigers u.U. einfach den Index nehmen...Das ist gar keine schlechte Idee, zumal beim Wachsen des Vektors die Elemente an eine neue Adresse umziehen, ihr Index aber gleich bleibt.