Saya tahu bahwa pertanyaan ini sudah ditanyakan beberapa kali tetapi saya tidak dapat menemukan jawaban untuk kasus khusus ini.
Katakanlah saya memiliki kelas sepele yang tidak memiliki sumber daya apa pun dan memiliki destruktor kosong dan konstruktor default. Ini memiliki beberapa variabel anggota dengan inisialisasi di dalam kelas; tidak satu pun dari mereka const
.
Saya ingin menginisialisasi ulang dan objek kelas tersebut tanpa menulis deInit
metode dengan tangan. Apakah aman melakukannya seperti ini?
void A::deInit()
{
new (this)A{};
}
Saya tidak dapat melihat masalah dengan itu - objek selalu dalam keadaan valid, this
masih menunjuk ke alamat yang sama; tapi ini C ++ jadi saya ingin memastikan.
*this = A{};
?
*this = A{};
berarti, this->operator=(A{});
yaitu membuat objek sementara dan menugaskannya *this
, mengganti nilai semua anggota data dengan nilai sementara. Karena itu yang Anda inginkan dan (menurut saya) lebih mudah dibaca daripada penempatan yang baru, saya akan menggunakannya.