C++ Academy · Pelajaran

Pemusnah dan Pembersihan

Lepaskan sumber secara automatik

Pelajaran 2 daripada 413 langkah

Pemusnah dan Pembersihan ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Perkara yang Dilakukan oleh Pemusnah

Pemusnah dijalankan apabila jangka hayat objek berakhir. Tugasnya ialah melepaskan apa sahaja yang dimiliki oleh objek tersebut. Namanya ialah ~ClassName.

#include <iostream>

class File {
public:
    ~File() { std::cout << "closing file\n"; }
};

int main() {
    File f;
}   // ~File runs here

Membebaskan Memori yang Dimiliki

Jika sesuatu kelas memiliki memori timbunan, pemusnahnya mesti membebaskan memori tersebut. Inilah tempat klasik untuk memanggil delete.

#include <iostream>

class Buffer {
    int* data;
public:
    Buffer(int n) : data(new int[n]) {}
    ~Buffer() { delete[] data; }   // cleanup
};

int main() { Buffer b(10); }

Pemusnah Dijalankan Secara Automatik

Anda tidak memanggil pemusnah sendiri untuk objek tindanan — pengkompil menyisipkan panggilan tersebut pada akhir skop.

Susunan Terbalik Ahli

Objek ahli dimusnahkan dalam susunan terbalik daripada pengisytiharan mereka, selepas badan pemusnah selesai dijalankan.

#include <iostream>

struct A { ~A() { std::cout << "~A\n"; } };
struct B { ~B() { std::cout << "~B\n"; } };
struct C {
    A a;
    B b;          // destroyed before a
    ~C() { std::cout << "~C\n"; }
};

int main() { C c; }

Pemusnah Maya

Jika Anda memadamkan objek terbitan melalui penuding asas, pemusnah asas mesti bersifat virtual — jika tidak, bahagian terbitan akan bocor.

#include <iostream>

struct Base {
    virtual ~Base() { std::cout << "~Base\n"; }
};
struct Derived : Base {
    ~Derived() override { std::cout << "~Derived\n"; }
};

int main() {
    Base* p = new Derived();
    delete p;   // both run thanks to virtual
}

Pemusnah Tidak Sepatutnya Melontarkan Pengecualian

Melontarkan pengecualian daripada pemusnah semasa pengunduran tindanan akan menamatkan program. Pemusnah hendaklah ditanda secara (tersirat) sebagai noexcept dan tidak membenarkan pengecualian terlepas.

Pemusnah Lalai

Jika Anda tidak menulisnya, pengkompil menjana pemusnah yang memusnahkan setiap ahli. Bagi kelas yang hanya mempunyai ahli RAII, itulah pilihan yang tepat.

#include <string>
#include <vector>

struct Record {
    std::string name;          // self-cleaning
    std::vector<int> values;   // self-cleaning
};   // default destructor is enough

Pemusnah Lalai Eksplisit

Tulis ~Class() = default; untuk meminta secara eksplisit pemusnah yang dijana pengkompil — berguna apabila Anda memerlukan pemusnah maya tetapi tiada logik tersuai.

#include <iostream>

struct Shape {
    virtual ~Shape() = default;   // virtual + default
};

Melepaskan Sumber Bukan Memori

Pemusnah juga menutup fail, melepaskan kunci dan memutuskan sambungan soket — bukan sekadar membebaskan memori. Setiap sumber yang diperoleh harus diuruskan di sini.

Susunan Merentas Objek

Beberapa pemboleh ubah setempat dimusnahkan dalam susunan pembinaan terbalik, jadi pemusnah boleh menggunakan objek yang dicipta sebelum objeknya dengan selamat.

Biarkan Ahli RAII Menjalankan Tugas

Jika setiap ahli ialah jenis RAII, biasanya Anda tidak memerlukan pemusnah tersuai langsung. Simpan pemusnah yang ditulis sendiri untuk sumber mentah.

Semakan Pantas

Uji pemahaman Anda tentang pemusnah.

Rumusan

Anda telah mempelajari bahawa pemusnah melepaskan sumber yang dimiliki secara automatik pada akhir jangka hayat, menjalankan ahli mengikut susunan pengisytiharan terbalik, tidak boleh melontarkan pengecualian dan perlu bersifat virtual dalam kelas asas polimorfik. Ahli RAII sering menjadikan pemusnah tersuai tidak diperlukan.

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Pemusnah dan Pembersihan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Pemusnah dan Pembersihan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemusnah dan Pembersihan”?

Lepaskan sumber secara automatik Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pemusnah dan Pembersihan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Prinsip RAII
  2. Pemusnah dan Pembersihan
  3. Peraturan Tiga/Lima
  4. Pengawal Skop
← Kembali ke C++ Academy