Mengapa Mengembalikan std::unique_ptr Tanpa std::move adalah Dibenarkan
Walaupun std::unique_ptr melarang pembinaan salinan, penyata pulangkan yang memaparkan unique_ptrs dikecualikan. Tingkah laku ini sejajar dengan spesifikasi bahasa C, terutamanya klausa 12.8 §34 dan §35.
Apabila syarat tertentu dipenuhi, pelaksanaan mungkin mengetepikan pembinaan salinan/pindah untuk objek kelas. Pengoptimuman ini, yang dikenali sebagai penyingkiran salinan, dibenarkan dalam penyata pulangan untuk jenis pulangan kelas dalam fungsi. Pengecualian terpakai pada ungkapan yang melibatkan objek automatik tidak meruap yang jenisnya sepadan dengan jenis pemulangan fungsi.
Selain itu, apabila penyingkiran salinan berlaku untuk objek lnilai, resolusi beban lampau untuk pembina salinan diteruskan seolah-olah objek itu ditetapkan dengan nilai r.
Penyusun Pelaksanaan
Pengecualian ini dikendalikan dalam pengkompil. Penyusun memanfaatkan spesifikasi bahasa untuk mengenali dan menggunakan teknik penyingkiran, mengoptimumkan kod dengan menghapuskan operasi yang tidak perlu.
Pulangan Nilai Dinamakan
Perlu diperhatikan bahawa pengembalian mengikut nilai ialah pilihan optimum dalam senario sedemikian. Walaupun tanpa penyingkiran, nilai yang dinamakan dalam penyata pulangan dikendalikan sebagai nilai r, menanggung overhed minimum.
Atas ialah kandungan terperinci Mengapa Saya Boleh Mengembalikan `std::unique_ptr` Tanpa `std::move`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!