Rumah > pembangunan bahagian belakang > C++ > Bagaimana Anda Harus Menggunakan Semula Bekas Beralih dengan Betul dalam C ?

Bagaimana Anda Harus Menggunakan Semula Bekas Beralih dengan Betul dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-03 02:42:10
asal
617 orang telah melayarinya

How Should You Properly Reuse Moved Containers in C  ?

Menggunakan Semula Bekas Alih: Pendekatan Yang Betul

Topik penggunaan semula bekas yang dialihkan dalam C telah mencetuskan perbincangan. Artikel ini meneroka kaedah yang betul untuk mengendalikan situasi sedemikian.

Pertimbangkan coretan kod berikut:

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Salin selepas log masuk

Menurut draf standard C 0x, ver3 nampaknya merupakan pendekatan yang diutamakan sejak pemindahan objek berada dalam "keadaan yang sah tetapi tidak ditentukan." Untuk menjelaskan konsep ini, mari rujuk definisi dalam piawai:

[defns.valid]
§17.3.26     valid but unspecified state

an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type
Salin selepas log masuk

Ini bermakna objek yang dialihkan masih hidup dan boleh dikendalikan seperti biasa, tidak termasuk tindakan dengan prasyarat (melainkan prasyarat disahkan terlebih dahulu).

Sebagai contoh, operasi clear() tidak mempunyai prasyarat. Dengan menggunakan clear(), bekas itu ditetapkan semula kepada keadaan yang ditentukan, membolehkan penggunaannya yang seterusnya.

Oleh itu, cara yang betul untuk menggunakan semula bekas yang dialihkan adalah dengan melakukan operasi clear(), seperti yang ditunjukkan dalam ver2 dalam coretan kod. Pendekatan ini memastikan bekas dipulihkan kepada keadaan yang diketahui dan konsisten.

Atas ialah kandungan terperinci Bagaimana Anda Harus Menggunakan Semula Bekas Beralih dengan Betul dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan