Memulangkan melalui Rujukan dalam Operator Tugasan Salin: Konsep Berbelit-belit Didedahkan
Konsep mengembalikan rujukan daripada operator tugasan salinan dalam C boleh membingungkan. Mengapa tidak hanya mengembalikan salinan objek baharu? Untuk merungkai enigma ini, mari kita menyelidiki contoh yang melibatkan kelas A dan pengendali tugasannya:
class A { public: A(int param); A& operator=(const A& a); private: int param; }; int main() { A a1(10); A a2 = a1; A a3; a3 = a2; // The problematic line } A::A(int param) : param(param) {} A& A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
Pada mulanya, mengembalikan nilai daripada pengendali tugasan kelihatan seperti pilihan yang berdaya maju. Walau bagaimanapun, pengembalian mengikut nilai dalam konteks ini menimbulkan beberapa kelemahan. Dengan setiap panggilan kepada pengendali tugasan, kedua-dua pembina dan pemusnah digunakan. Pertimbangkan rantai tugasan berikut:
a = b = c;
Apabila anda mengembalikan nilai, rantaian ini mencetuskan dua panggilan kepada pengendali tugasan, dua panggilan kepada pembina salinan dan dua panggilan kepada pemusnah. Proses pembaziran ini menggunakan sumber yang tidak perlu dan tidak menawarkan faedah yang ketara.
Sebaliknya, pemulangan melalui rujukan meminimumkan overhed dengan ketara. Nilai disalin dari satu objek ke objek lain tanpa memerlukan panggilan pembina atau pemusnah tambahan. Pengoptimuman ini amat penting dalam senario yang kompleks di mana berbilang tugasan berlaku.
Ringkasnya, pengembalian mengikut nilai dalam pengendali tugasan salinan tidak menawarkan kelebihan tetapi dikenakan penalti prestasi yang ketara. Sebaliknya, pemulangan melalui rujukan memastikan penggunaan sumber yang cekap sambil mengekalkan kefungsian pengendali.
Atas ialah kandungan terperinci Mengapa Mengembalikan Rujukan, Bukan Nilai, daripada Operator Tugasan Salinan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!