Penggunaan C ++ unique_ptr

Use C Unique_ptr



Petunjuk pintar digunakan untuk memperuntukkan sumber secara dinamik. Banyak jenis penunjuk pintar digunakan dalam C ++ untuk pelbagai tujuan, seperti auto_ptr , unik_ptr , dan dikongsi_ptr . Penunjuk auto_ptr sudah tidak digunakan lagi dalam versi baru C ++. The unik_ptr digunakan sebagai pengganti auto_ptr. Objek penunjuk ini dapat mengambil hak milik penunjuk. Objek penunjuk ini memiliki penunjuk secara unik, dan tidak ada penunjuk lain yang dapat menunjuk ke objek tersebut. The unik_ptr memadam objek secara automatik. Penunjuk ini menguruskan objek-objek tersebut jika benda-benda itu hancur, atau nilai objek diubah atau fungsi reset () dipanggil. Ciri-ciri unik_ptr dan penggunaan penunjuk ini dibincangkan dalam tutorial ini.

Komponen Utama:







Dua komponen utama objek unik_ptr disediakan di bawah:



A. Penunjuk yang Disimpan:



Ia digunakan untuk menguruskan objek yang dibuat oleh penunjuk unik. Ia dicipta pada saat penciptaan penunjuk, dan ia dapat diubah dengan cara yang berbeza.





B. Pemadam yang Disimpan:

Ia memerlukan argumen jenis penunjuk yang disimpan yang digunakan untuk menghapus objek yang diuruskan. Ia juga dibuat pada saat penunjuk pointer, dan ia dapat diubah dengan cara yang berbeza.



Contoh 1: Buat Objek Penunjuk Kelas Dengan Konstruktor

Cara untuk menyatakan objek penunjuk unik kelas dan mengakses kaedah kelas adalah dengan menggunakan objek seperti yang ditunjukkan dalam contoh berikut. Kelas dengan konstruktor dan kaedah awam telah dinyatakan dalam kod. Pembina mempunyai tiga hujah. Penunjuk unik pertama telah dibuat dengan memanggil pembina dengan tiga nilai argumen. The Keputusan () kaedah dipanggil oleh objek penunjuk yang mengira jumlah tiga nilai argumen pembina. Seterusnya, objek penunjuk unik kedua dibuat tanpa memanggil konstruktor, dan penunjuk pertama dipindahkan ke penunjuk kedua. The Keputusan () kaedah dipanggil oleh objek penunjuk kedua.

//Sertakan perpustakaan yang diperlukan

#sertakan

#sertakan

menggunakannamespace std;

//Tentukan kelas
Penambahan kelas{

int nombor1, nombor2, nombor3;
awam:
//Menyatakan pembina
Penambahan(int a, int b, int c)
{
nombor1 = a;
nombor2 = b;
nombor3 = c;
}
//Menyatakan kaedah untuk mengirajumlah
Hasil int()
{
kembalinombor1 + nombor2 + nombor3;
}
};
int utama()
{
//Menyatakan penunjuk pertama
penunjuk unik_ptr1(Tambahan baru(Empat lima,55,30));

kos<<'Hasil penjumlahan menggunakan penunjuk pertama:'<Keputusan() <<' n';
//Menyatakan penunjuk kedua
pointer2 unik_ptr;
//Pindahkan penunjuk pertama ke penunjuk kedua
pointer2 = bergerak(penunjuk1);

kos<<'Hasil penjumlahan menggunakan penunjuk kedua:'<Keputusan() <<' n';
pulangan0;
}

Pengeluaran:

Output berikut akan muncul setelah melaksanakan kod di atas. Jumlah 45, 55, dan 30 adalah 130 yang telah dicetak untuk kedua-dua petunjuk.

Contoh 2: Buat Objek Penunjuk Kelas Dengan Konstruktor dan Pemusnah

Cara untuk menyatakan objek penunjuk unik kelas dengan konstruktor dan pemusnah telah ditunjukkan dalam contoh berikut. Kelas mengandungi konstruktor dengan satu argumen, kaedah umum bernama Paparan () kepada nilai pemboleh ubah kelas, dan pemusnah yang akan mencetak mesej pemusnahan sebelum memusnahkan objek kelas. Kaedah Paparan () dipanggil setelah membuat objek penunjuk unik dalam kod.

//Sertakan perpustakaan yang diperlukan

#sertakan

#sertakan

menggunakannamespace std;

//Tentukan kelas
Pelanggan kelas
{
nama tali;

awam:
//Menyatakan pembina
Pelanggan(tali n)
{
nama = n;
kos<<'Sumber diperuntukkan. n';
}

//Menyatakan kaedah untuk mencetak nama pelanggan
paparan kosong()
{
kos<<'Nama pelanggan adalah:'<<nama<<' n';
}

//Menyatakan pemusnah
~ Pelanggan()
{
kos<<'Sumber itu musnah. n';
}
};
int utama()
{
//Peruntukkan objek Sumber yang dimiliki oleh unik_ptr
unik_ptruPointer{pelanggan baru('Mir Abbas') };
uPointer->Paparan();
pulangan0;
}

Pengeluaran:

Output berikut akan muncul setelah melaksanakan kod di atas:

Contoh 3: Periksa Penunjuk Setelah Memindahkan Hak Milik

Cara untuk memeriksa pemilikan penunjuk unik telah ditunjukkan dalam contoh berikut dengan membuat dua petunjuk unik kelas. Kelas dengan dua pemboleh ubah rentetan dan kaedah awam telah dinyatakan dalam kod. Kaedah Book_details () kelas dipanggil setelah membuat objek penunjuk unik pertama kelas. Seterusnya, objek penunjuk unik kedua telah dibuat, dan penunjuk pertama telah dipindahkan ke penunjuk kedua yang menghancurkan penunjuk pertama. Pemilikan kedua-dua penunjuk harus diperiksa kemudian.

//Sertakan perpustakaan yang diperlukan

#sertakan

#sertakan

menggunakannamespace std;

//Tentukan kelas
Buku kelas{

tajuk rentetan ='Bahasa Pengaturcaraan C ++';
pengarang tali ='Bjarne Stroustrup';

awam:
//Menyatakan kaedah untuk mencetak butiran buku
voidBook_detail()
{
kos<<'Nama Buku:'<<tajuk<<' n';
kos<<'Nama Pengarang:'<<pengarang<<' n';
}
};
int utama()
{
//Menyatakan penunjuk pertama
penunjuk unik_ptr1(Buku baru());

penunjuk1->Butiran_buku();
//Menyatakan penunjuk kedua
pointer2 unik_ptr;
//Pindahkan penunjuk pertama ke penunjuk kedua
pointer2 = bergerak(penunjuk1);

//Periksa penunjuk pertama
sekiranya (siaran_ statik(penunjuk1))kos<<'Poiner pertama tidak sia-sia n';
elsecout<<'Poiner pertama adalah sifar n';
//Periksa penunjuk kedua
sekiranya (siaran_ statik(penunjuk2))kos<<'Poiner kedua tidak sia-sia n';
elsecout<<'Poiner kedua adalah sifar n';

pulangan0;
}

Pengeluaran:

Output berikut akan muncul setelah melaksanakan kod di atas. Mengikut keluaran, kepemilikan penunjuk pertama dikeluarkan, dan pesannya, Penunjuk pertama adalah sifar telah dicetak untuk penunjuk pertama. Pemilikan penunjuk kedua ada, dan mesej, Penunjuk pertama tidak sia-sia telah dicetak untuk penunjuk kedua:

Kesimpulan:

Tujuan penggunaan penunjuk unik dalam pengaturcaraan C ++ telah dijelaskan dalam tutorial ini dengan menggunakan beberapa contoh. Cara-cara membuat penunjuk unik, memindahkan hak milik penunjuk, dan memeriksa pemilikan penunjuk semasa telah dijelaskan di sini untuk membantu pembaca mengetahui penggunaan penunjuk unik dengan betul.