


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:
- Menempah kapasiti yang mencukupi: Dengan memanggil kaedah rizab() pada vektor, kapasiti dalaman boleh ditingkatkan lebih awal, menghalang keperluan untuk pengagihan semula.
- Menggunakan emplace_back(): Kaedah ini membolehkan pembinaan langsung elemen dalam vektor, menghapuskan keperluan untuk menyalin.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan?

Gulc: Perpustakaan C dibina dari awal

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?

Penggunaan dan perkongsian frasa yang berbeza

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap?

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi?
