Ist der Wert des this
Zeigers während der Lebensdauer eines bestimmten Objekts garantiert konstant? Ich kann mir keinen Fall vorstellen, in dem sich das ändern würde, aber ich weiß nicht, ob mir etwas fehlt.
c++
this
language-lawyer
object-lifetime
Daniel Langr
quelle
quelle
this
Zeigers ist immer der Wert der Adresse des Objekts, für das die Funktion aufgerufen wurde. Die Frage ist also gleichbedeutend mit "Kann ein Objekt seine Speicheradresse im Laufe der Lebensdauer ändern?"std::move
diethis
Zeiger ändern . Formal würden wir sagen, dass dies zwei verschiedene Objekte sind, aber informell kann man sie als "dasselbe" betrachten, was Verwirrung stiften könnte, wenn man nicht aufpasst.Antworten:
Ja .
Wie Benutzer Aconcagua es ausdrückt: Der Wert des
this
Zeigers ist immer der Wert der Adresse des Objekts, für das die Funktion auf 1 aufgerufen wurde . Die Frage ist also gleichbedeutend mit:Dies ist per Definition von
lifetime
2 nicht möglich . Die Lebensdauer eines Objekts beginnt, wenn oder nachdem es gelagert wurde, und endet, bevor es freigegeben wird.1)
[class.this]/1
2)
[basic.life]/1
(Schwerpunkt Mine)quelle
this
, um unabhängig von den Bewegungen auf dem Haufen jedes Mal den gleichen Wert zu liefern ?Ein Objekt hat einen Speicherbereich.
this
Punkte dort.quelle
Der Wert von
this
ist garantiert konstant, wenn das Programm ihn jemals liest, wenn anschließend einige Bits des gelesenen Werts nicht mehr müllsammeln können oder wenn anschließend einige Bits des gelesenen Werts außerhalb des Programms entkommen. In allen anderen Fällen verhält es sich wie eine Schrödingerkatze, dh es ist gleichzeitig konstant und variabel.quelle
this