Adakah std::unique_ptr
Adakah std::unique_ptr
Tingkah Laku Bergantung Pelaksanaan dalam Visual Studio 2010 SP1
Tingkah laku dalam Visual Studio 2010 SP1 mencadangkan bahawa pelaksanaan std::unique_ptr memerlukan takrifan lengkap tentang Thing. Ini bukan keperluan standard, sebaliknya pilihan khusus pelaksanaan.
Pengecualian Separa dalam Perpustakaan Standard
Walaupun kebanyakan templat perpustakaan standard C memerlukan jenis yang lengkap, std ::shared_ptr dan std::unique_ptr ialah separa pengecualian. Sesetengah fungsi mereka boleh dijadikan instantiated dengan jenis yang tidak lengkap, kerana peranannya dalam menyokong simpulan bahasa seperti pola penunjuk kepada pelaksanaan (pimpl). Walau bagaimanapun, menggunakan jenis yang tidak lengkap dalam operasi tertentu boleh membawa kepada tingkah laku yang tidak ditentukan, seperti memadamkan objek yang tidak lengkap.
Keperluan Kelengkapan Taip untuk Operasi Berbeza
std::unique_ptr and std::shared_ptr memerlukan jenis lengkap dalam situasi yang berbeza. Sebagai contoh, ~std::unique_ptr memerlukan jenis yang lengkap untuk pemusnahnya, manakala std::unique_ptr(A*) membenarkan jenis yang tidak lengkap jika penunjuk sedang diambil alih. Jadual meringkaskan keperluan ini:
Operation | std::unique_ptr | std::shared_ptr |
---|---|---|
Default constructor | incomplete | incomplete |
Copy constructor | - | incomplete |
Move constructor | incomplete | incomplete |
Destructor | complete | incomplete |
Constructor from pointer | incomplete | complete |
Copy assignment | - | incomplete |
Move assignment | complete | incomplete |
Reset without argument | complete | incomplete |
Reset with argument | complete | complete |
Sebagai kesimpulan, manakala std::unique_ptr sememangnya tidak memerlukan definisi jenis lengkap dalam standard C, sesetengah pelaksanaan (seperti Visual Studio 2010 SP1) mungkin mengenakan keperluan sedemikian. . Adalah penting untuk mengetahui keperluan khusus pelaksanaan yang digunakan untuk mengelakkan tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Adakah `std::unique_ptr` Memerlukan Takrifan Lengkap T?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!