Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Memindahkan Pemilikan `unique_ptr` dengan Betul kepada Lambda dalam C ?

Bagaimanakah Saya Boleh Memindahkan Pemilikan `unique_ptr` dengan Betul kepada Lambda dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 04:55:19344semak imbas

How Can I Properly Transfer Ownership of a `unique_ptr` to a Lambda in C  ?

Memelihara Pemilikan dalam Lambda dengan Penunjuk Unik

Dalam C , unique_ptr direka bentuk untuk mengurus pemilikan objek tunggal secara eksklusif. Apabila cuba menangkap unique_ptr ke dalam ungkapan lambda, pemilikan boleh menjadi samar-samar. Begini cara untuk menangani isu ini:

Pada mulanya, percubaan untuk menangkap unique_ptr sebagai rujukan dalam lambda mungkin gagal untuk disusun. Untuk memindahkan pemilikan kepada lambda secara eksplisit, C 14 memperkenalkan tangkapan umum lambda:

auto getAction = [](std::unique_ptr<MyClass> psomething) {
    // Ownership now belongs to the lambda
    return [a = std::move(psomething)]() {
        a->do_something();
        // psomething is released after this point
    };
};

Pemindahan Pemilikan dengan Pelaksanaan Salin dan Alih:

Dalam kod anda yang dikemas kini, anda telah menentukan fungsi salin dan alih untuk mengendalikan pelbagai jenis rujukan. Untuk memastikan pemindahan pemilikan yang betul, pertimbangkan perkara berikut:

  • pindah hendaklah hanya menerima rujukan lnilai kerana mengalihkan nilai r (objek sementara) ialah tingkah laku yang tidak ditentukan.
  • Elakkan mengisytiharkan versi rnilai bagi bergerak untuk mengelakkan pergerakan objek sementara secara tidak sengaja.

Dengan pengubahsuaian ini, kod anda harus berfungsi seperti yang diharapkan, mengekalkan pemilikan dalam ungkapan lambda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Pemilikan `unique_ptr` dengan Betul kepada Lambda dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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