Memahami Perbezaan antara "=default" dan "{}" untuk Default Constructor and Destructor
Sementara "=default" dan "{ }" mungkin kelihatan boleh ditukar ganti untuk pembina lalai dan pemusnah, terdapat perbezaan utama apabila mempertimbangkan pemusnah bukan maya dan pembina.
Pemusnah Bukan Maya
Apabila berurusan dengan pemusnah bukan maya, sintaks "=default" memainkan peranan penting. Ia mengarahkan pengkompil untuk menjana pemusnah secara automatik seperti yang dilakukan untuk kelas remeh, menjadikan jenis itu dianggap remeh. Sebaliknya, "{}" mencipta pemusnah yang disediakan pengguna, mengubah status remeh kelas.
Pembina Bukan Maya
Begitu juga, untuk bukan -pembina maya, menggunakan "=default" membolehkan pengkompil menjana pembina lalai, mengekalkan perkara remeh. Walau bagaimanapun, "{}" menentukan pembina yang disediakan pengguna, yang berpotensi memberi kesan kepada remeh kelas.
Kelas Trivial
Dalam C 11, kelas remeh ialah kelas yang tidak tidak mempunyai sebarang fungsi ahli khas yang disediakan pengguna (pembina lalai, salin/pindah pembina/tugasan, pemusnah). Fungsi ini dijana secara automatik, membolehkan pengoptimuman seperti memcpy digunakan.
Contoh
Pertimbangkan kod berikut:
struct Trivial { int foo; }; struct NotTrivial { int foo; NotTrivial() {} }; struct Trivial2 { int foo; Trivial2() = default; };
Kesimpulan
Walaupun "=default" dan "{}" mungkin kelihatan serupa, mereka boleh mempunyai implikasi yang besar untuk remeh kelas apabila digunakan dengan pemusnah atau pembina bukan maya. "=default" mengekalkan tingkah laku lalai pengkompil dan mengekalkan perkara remeh, manakala "{}" mencipta fungsi yang disediakan pengguna dan berpotensi mengubah status remeh kelas.
Atas ialah kandungan terperinci Apakah Perbezaan Antara '=default' dan '{}' untuk Pembina Lalai dan Pemusnah dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!