Risiko Terhasil daripada Bekas C STL
Walaupun potensi kelebihan memperoleh kelas daripada bekas C STL, seperti kelebihan beban fungsi, pengkhususan templat , dan penyahpepijatan yang dipertingkatkan, terdapat risiko yang wujud yang berkaitan dengan perkara ini pendekatan.
Pertimbangkan contoh berikut:
#include <vector> class Rates : public std::vector<double> { }; class Charges : public std::vector<double> { }; int main() { auto p1 = new Rates; auto p2 = new Charges; kill_it(p2); // User code that knows nothing about Rates or Charges kill_it(p1); return 0; }
Fungsi kill_it memadamkan ingatan mangsa semasa melaksanakan pemusnah bukan maya std::vector
Masalah timbul jika pengguna secara tidak sengaja memperkenalkan ralat dalam fungsi kill_it ??? bahagian. Contohnya, jika pengguna mengubah suai p2 untuk menunjuk ke objek Kadar sebelum memanggil kill_it(p2), pemusnah bukan maya std::vector
Untuk mengurangkan risiko ini, secara amnya disyorkan untuk menggunakan komposisi dan bukannya terbitan semasa mengendalikan bekas STL. Komposisi membolehkan pendekatan yang lebih fleksibel dan kurang terdedah kepada ralat.
Atas ialah kandungan terperinci Patutkah Anda Mewarisi daripada Bekas C STL: Risiko dan Alternatif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!