C 11 Move Constructor Tidak Dipanggil, Default Constructor Diutamakan
Soalan:
Dalam C 11, apabila menginstant objek melalui objek lain, mengapa mungkin pembangun bergerak tidak dipanggil apabila ia sepatutnya?
Jawapan:
Setelah instantiasi, pengkompil mungkin sekali-sekala mengaplikasikan teknik yang dikenali sebagai copy elision. Penyingkiran salin membenarkan pembinaan terus objek sementara ke dalam sasaran yang akan disalin atau dipindahkan ke dalamnya, memintas salinan atau memindahkan pasangan pembina/pemusnah.
Standard membenarkan penyingkiran salinan dalam keadaan berikut:
Dalam contoh yang diberikan, apabila menginstant z dengan X("ujian"), penyingkiran salinan berlaku kerana ia dianggap sebagai objek sementara yang tidak terikat kepada rujukan. Akibatnya, ia dibina terus ke dalam z, memintas pembina bergerak dan membina z menggunakan pembina lalai sebaliknya.
Panggilan move(X("test") secara eksplisit menghalang penyingkiran salinan dan memaksa penggunaan pembina bergerak , seperti yang diperhatikan dalam output yang diubah suai.
Atas ialah kandungan terperinci Mengapakah pembina bergerak C 11 tidak dipanggil apabila menginstant objek dengan objek lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!