Rumah >pembangunan bahagian belakang >C++ >Mengapakah pembina salinan objek `Myint` dipanggil beberapa kali apabila menggunakan `push_back()` pada `vektor`?
Berbilang Invokasi Pembina Salin semasa Operasi Tolak_belakang Vektor
Dalam C , apabila elemen ditambah pada vektor menggunakan kaedah push_back() , pembina salinan jenis elemen tersebut biasanya digunakan. Walau bagaimanapun, dalam senario tertentu, berbilang seruan pembina salinan mungkin diperhatikan.
Pertimbangkan coretan kod berikut:
<code class="cpp">class Myint { private: int my_int; public: Myint() : my_int(0) { cout << "Inside default " << endl; } Myint(const Myint& x) : my_int(x.my_int) { cout << "Inside copy with my_int = " << x.my_int << endl; } void set(const int& x) { my_int = x; } }; vector<Myint> myints; Myint x; myints.push_back(x); x.set(1); myints.push_back(x);</code>
Apabila kod ini dilaksanakan, output berikut dihasilkan:
Inside default Inside copy with my_int = 0 Inside copy with my_int = 0 Inside copy with my_int = 1
Output ini menunjukkan bahawa pembina salinan dipanggil empat kali, bukan hanya dua kali seperti yang dijangkakan. Sebab bagi tingkah laku ini terletak pada kerja dalaman pengurusan memori vektor.
Apabila push_back() dipanggil pada vektor yang telah mencapai kapasiti dalamannya, vektor mesti diperuntukkan semula untuk menampung elemen baharu. Semasa pengagihan semula ini, elemen sedia ada disalin ke lokasi memori baharu. Proses ini menghasilkan seruan tambahan pembina salinan untuk setiap elemen.
Untuk mengelakkan gelagat penyalinan berbilang ini, beberapa langkah boleh diambil:
Dengan menggunakan teknik sedemikian, seruan yang tidak perlu daripada pembina salinan boleh diminimumkan, meningkatkan kecekapan operasi vektor.
Atas ialah kandungan terperinci Mengapakah pembina salinan objek `Myint` dipanggil beberapa kali apabila menggunakan `push_back()` pada `vektor`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!