Rumah > pembangunan bahagian belakang > C++ > Adakah `std::unique_ptr` Memerlukan Takrifan Lengkap T?

Adakah `std::unique_ptr` Memerlukan Takrifan Lengkap T?

Barbara Streisand
Lepaskan: 2024-12-25 14:10:15
asal
935 orang telah melayarinya

Does `std::unique_ptr` Need a Complete Definition of T?

Adakah std::unique_ptr Diperlukan untuk Mengetahui Definisi Penuh T?

Adakah std::unique_ptr diperlukan untuk mempunyai definisi lengkap jenis T yang diuruskannya? Soalan ini timbul daripada pemerhatian bahawa std::unique_ptr gagal untuk menyusun dalam Visual Studio 2010 SP1 apabila Perkara diisytiharkan ke hadapan.

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!

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