Rumah > pembangunan bahagian belakang > C++ > Patutkah Anda Dapatkan daripada Bekas C STL?

Patutkah Anda Dapatkan daripada Bekas C STL?

Barbara Streisand
Lepaskan: 2024-12-01 13:46:13
asal
474 orang telah melayarinya

Should You Derive from C   STL Containers?

Potensi Perangkap dalam Mendapatkan daripada Kontena C STL

Dalam bidang pengaturcaraan C, sering timbul perdebatan mengenai merit terbitan daripada bekas perpustakaan standard (bekas yang disertakan dengan perpustakaan standard C, seperti vektor, senarai, dll.) atau hanya menggunakan typedefs untuk mewakili mereka (mencipta nama baharu untuk jenis sedia ada tanpa menentukan jenis baharu). Walaupun kedua-dua pendekatan menawarkan kelebihan mereka, adalah penting untuk mengetahui potensi risiko yang berkaitan dengan terbitan daripada bekas STL.

Apabila menggunakan terbitan, adalah penting untuk diingat bahawa bekas standard, seperti vektor, tidak mengisytiharkan pemusnah mereka sebagai maya. Ini bermakna jika anda memperoleh daripada salah satu bekas ini dan mentakrifkan pemusnah bukan maya dalam kelas terbitan anda, anda akan menghadapi masalah apabila cuba memusnahkan objek kelas terbitan itu menggunakan penuding ke kelas asas.

Untuk menggambarkan isu ini, pertimbangkan contoh berikut:

class Rates : public std::vector<double> { /* ... */ };

int main() {
    std::vector<double>* p = new Rates;
    delete p;  // This will invoke the non-virtual ~std::vector<double>(), potentially leading to problems
}
Salin selepas log masuk

Dalam kes ini, apabila pengendali padam dipanggil pada penunjuk p, ia akan memanggil pemusnah kelas asas, std::vector, bukannya pemusnah kelas terbitan, Rates. Ini boleh membawa kepada masalah jika kelas terbitan mengandungi sumber tambahan yang perlu dibersihkan semasa pemusnahan.

Oleh itu, sementara terbitan daripada bekas STL menawarkan kelebihan tertentu, seperti mendayakan lebihan fungsi dan pengkhususan templat, ia adalah penting. untuk berhati-hati dan pastikan anda tidak mengatasi pemusnah kelas asas dengan bukan maya. Jika anda memerlukan gelagat polimorfik, pertimbangkan untuk menggunakan gubahan dan bukannya warisan.

Atas ialah kandungan terperinci Patutkah Anda Dapatkan daripada Bekas C STL?. 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