Untuk mengetahui tentang apa itu semantik gerak?

pemrograman

[ad_1]

Hai, sebenarnya saya mencoba memahami tentang semantik perpindahan, masalahnya saya tidak memahami teorinya secara praktis. Hanya satu keraguan adalah bagaimana semantik pemindahan bergerak karena konstruktor pemindahan menggunakan fungsi pemindahan, teori mengatakan bahwa mentransfer kepemilikan ke sumber daya lain berarti konstruktor salinan akan memanggil dengan benar. Saya tidak tahu cara kerja Move Constructor, namun ia perlu disalin dengan benar. Jadi, bantu saya cara kerja semantik pemindahan dan informasi alamat objek setelah konstruktor pemindahan, tolong jelaskan secara mendalam.

Apa yang saya coba:

Mencoba memahami tentang perpindahan semantik, ada beberapa keraguan.

Solusi 1

Untuk memahami semantik perpindahan, pertama-tama Anda harus memahami apa itu objek sementara. Artinya, objek apa pun yang dibuat dengan cepat dan kemudian dibuang begitu saja:

C++
class A{/*assume it has functionality*/};

A a; // Solid object
A a1 = A(/* constructor parameter(s)*/); // Where as a1 is solid, the RValue assignment is a temporary objest which is when discarded triggers destructor semanticts

Jadi pindahkan semantik mengatakan Pindahkan A() ke a1, tanpa penyalinan seperti memiliki 2 objek yang sementara menempati memori.

Itu dapat bekerja bahkan tanpa semantik pemindahan, mengingat konstruktor salinan dan penetapan yang tepat telah diterapkan. Namun semantik perpindahan menghilangkan salinan yang berlebihan, misalnya jika objeknya berukuran besar.

Solusi 2

Saya membahas semantik gerakan di salah satu artikel saya

[^]

Memindahkan semantik pada dasarnya ‘memindahkan’ keadaan internal suatu objek ke objek lain dalam keadaan yang tepat, sehingga menghindari kebutuhan untuk membuat objek baru dan menyalin keadaannya.

Kompilerlah yang akan menentukan hal ini selama kompilasi. Ini melihat tugas Anda dan berdasarkan apakah ia menganggap variabel tertentu sebagai ‘sementara’, ia dapat ‘memindahkan’ keadaan internal variabel sementara ke nilai target Anda tanpa harus melalui konstruktor salinan.

Namun perlu diingat bahwa ini tidak selalu aman. Jika diterapkan secara salah, hal ini dapat menyebabkan kebocoran memori jika objek target tidak membuang sumber daya internalnya dengan benar sebelum ditimpa.

[ad_2]

コメント

タイトルとURLをコピーしました