Bilakah Memanggil Pemusnah Secara Manual Pilihan Reka Bentuk Yang Baik?

Mary-Kate Olsen
Lepaskan: 2024-11-16 11:08:03
asal
317 orang telah melayarinya

When is Manually Calling a Destructor a Good Design Choice?

Bolehkah Panggilan Pemusnah Manual Menunjukkan Reka Bentuk Buruk?

Adalah dipercayai secara meluas bahawa penggunaan pemusnah secara manual menunjukkan reka bentuk yang buruk. Walau bagaimanapun, terdapat pengecualian kepada peraturan ini.

Satu senario di mana panggilan pemusnah manual menjadi perlu ialah apabila hanya objek perlu dimusnahkan tanpa melepaskan memori yang diperuntukkan. Ini biasanya berlaku dalam senario di mana peruntukan memori dan deallocation dikendalikan secara berasingan daripada pembinaan dan pemusnahan objek. Dalam kes sedemikian, objek dibina menggunakan peletakan baharu pada blok memori sedia ada dan pemusnah dipanggil secara manual untuk melenyapkannya.

Pertimbangkan contoh berikut:

char buffer[sizeof(MyClass)];

{
  MyClass* p = new(buffer)MyClass;
  p->dosomething();
  p->~MyClass();
}

{
  MyClass* p = new(buffer)MyClass;
  p->dosomething();
  p->~MyClass();
}
Salin selepas log masuk

Satu lagi contoh ketara di mana manual panggilan pemusnah timbul ialah std:: allocator lalai yang digunakan oleh std::vector. Elemen dibina dalam vektor semasa push_back, tetapi memori diperuntukkan dalam ketulan terlebih dahulu. Akibatnya, vector::erase boleh memusnahkan elemen tanpa semestinya membebaskan memori asas, terutamanya jika operasi push_back dijangka tidak lama lagi.

Walaupun panggilan pemusnah manual menyimpang daripada prinsip OOP yang ketat, ia mungkin sesuai dalam situasi di mana pengurusan memori adalah bebas daripada kitaran hayat objek. Selain itu, melaksanakan pendekatan ini secara tempatan dalam kelas yang direka untuk tujuan sedemikian boleh melayakkan diri sebagai reka bentuk yang baik.

Atas ialah kandungan terperinci Bilakah Memanggil Pemusnah Secara Manual Pilihan Reka Bentuk Yang Baik?. 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