Rumah >pembangunan bahagian belakang >C++ >Bilakah `std::unique_ptr` dan `std::shared_ptr` Memerlukan Takrifan Lengkap T?
Adalah std::unique_ptr
Dalam pengaturcaraan C, gelagat templat dalam pustaka standard selalunya bergantung pada kesempurnaan jenis yang mereka nyatakan. Walaupun kebanyakan templat memerlukan jenis yang lengkap, std::unique_ptr dan std::shared_ptr adalah pengecualian.
std::unique_ptr dan Jenis Tidak Lengkap
std::unique_ptr membenarkan tidak lengkap jenis dalam konteks tertentu, tetapi bukan semua. Khususnya, ia memerlukan jenis yang lengkap apabila:
Jika tidak, ia boleh berfungsi dengan jenis yang tidak lengkap, seperti untuk:
std::shared_ptr dan Tidak Lengkap Jenis
std::shared_ptr mengikut peraturan yang serupa seperti std::unique_ptr, tetapi dengan dua perbezaan utama:
Ia memerlukan jenis yang lengkap apabila:
Implikasi untuk Pelaksanaan
Keperluan kesempurnaan ini bermakna pelaksanaan berbeza std::unique_ptr dan std::shared_ptr mungkin mengendalikan jenis tidak lengkap secara berbeza. Sebagai contoh, pelaksanaan Visual Studio 2010-SP1 mungkin memerlukan definisi lengkap jenis T untuk membuat instantiate std::unique_ptr
Keperluan Standard
Standard untuk std::unique_ptr dan std::shared_ptr tidak menyatakan secara eksplisit bahawa mereka tidak boleh berfungsi dengan jenis yang tidak lengkap. Walau bagaimanapun, keperluan pada tingkah laku mereka dalam keadaan tertentu membayangkan bahawa jenis yang lengkap diperlukan. Ini dijelaskan dalam Piawaian C, yang menyatakan bahawa kesahihan operasi tertentu bergantung pada kesempurnaan jenis yang diwujudkan dengan templat.
Kesimpulannya, manakala std::unique_ptr dan std::shared_ptr membenarkan jenis yang tidak lengkap dalam konteks tertentu, mereka memerlukan jenis lengkap untuk operasi tertentu. Keperluan ini berpunca daripada spesifikasi standard dan mungkin memberi kesan kepada gelagat templat dalam pelaksanaan yang berbeza.
Atas ialah kandungan terperinci Bilakah `std::unique_ptr` dan `std::shared_ptr` Memerlukan Takrifan Lengkap T?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!