Apakah nilai this
pointer dijamin konstan selama masa pakai objek tertentu? Saya tidak bisa membayangkan kasus di mana itu akan berubah, tetapi tidak tahu apakah saya tidak kehilangan sesuatu.
c++
this
language-lawyer
object-lifetime
Daniel Langr
sumber
sumber
this
pointer selalu adalah nilai dari alamat objek tempat fungsi dipanggil. Jadi pertanyaannya setara dengan 'dapatkah suatu benda mengubah alamat ingatannya sepanjang hidup?'std::move
akan mengubahthis
pointer. Secara formal kita dapat mengatakan bahwa itu adalah dua objek yang berbeda, tetapi secara informal orang mungkin menganggapnya "sama," yang dapat menimbulkan kebingungan jika seseorang tidak memperhatikan.Jawaban:
Ya .
Seperti yang dikatakan oleh pengguna Aconcagua : nilai
this
pointer selalu adalah nilai dari alamat objek tempat fungsi dipanggil pada 1 . Jadi pertanyaannya setara dengan:Ini tidak mungkin, dengan definisi
lifetime
2 . Masa hidup suatu objek dimulai ketika atau setelah penyimpanannya diperoleh dan berakhir sebelum saat dilepaskan.1)
[class.this]/1
2)
[basic.life]/1
(beri penekanan pada saya)sumber
this
setiap kali, terlepas dari gerakan di tumpukan?Objek memiliki wilayah penyimpanan.
this
poin di sana.sumber
Nilai
this
dijamin konstan jika program pernah membacanya, jika kemudian beberapa bit dari nilai baca tidak mungkin untuk mengumpulkan sampah atau jika kemudian beberapa bit dari nilai baca lolos di luar program. Dalam semua kasus lain, ia berperilaku seperti kucing Schrödinger, yaitu konstan dan variabel pada saat yang sama.sumber
this