Dalam perbincangan ini, kami menyiasat kemungkinan perangkap yang berkaitan dengan menolak elemen kembali daripada vektor yang sama dan meneroka teknik untuk memastikan keselamatannya.
Potensi Bahaya
Pertimbangkan coretan kod berikut:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Operasi tolak_balik kedua mungkin mengalokasikan semula vektor, membatalkan rujukan kepada elemen pertama. Oleh itu, pendekatan ini secara amnya dianggap tidak selamat.
Pendekatan Selamat
Untuk memastikan keselamatan operasi sedemikian, kami boleh menggunakan kaedah rizab untuk memperuntukkan ruang yang mencukupi terlebih dahulu:
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
Keakuran Standard
Tingkah laku yang diterangkan di atas telah ditangani dalam standard C (atau isu yang serupa):
1) Parameters taken by const reference can be changed during execution of the function Examples: Given std::vector v: v.insert(v.begin(), v[2]); v[2] can be changed by moving elements of vector
Walau bagaimanapun, isu ini tidak dianggap sebagai kecacatan, kerana menjadi tanggungjawab vektor untuk memastikan kefungsian walaupun kandungannya diubah suai.
Atas ialah kandungan terperinci Apabila Menolak Elemen dari Vektor yang Sama, Adakah Selamat Bergantung pada Rujukan Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!