Penggunaan C++ unique_ptr

Use C Unique_ptr



Pointer pintar digunakan untuk mengalokasikan sumber daya secara dinamis. Banyak jenis smart pointer yang digunakan dalam C++ untuk berbagai tujuan, seperti: auto_ptr , unique_ptr , dan shared_ptr . Pointer auto_ptr tidak digunakan lagi di versi baru C++. Unique_ptr digunakan sebagai pengganti auto_ptr. Objek pointer ini dapat mengambil kepemilikan pointer. Objek penunjuk ini memiliki penunjuk secara unik, dan tidak ada penunjuk lain yang dapat menunjuk ke objek. Unique_ptr menghapus objek secara otomatis. Pointer ini mengelola objek tersebut jika objek dihancurkan, atau nilai objek diubah atau fungsi reset() dipanggil. Fitur unique_ptr dan penggunaan pointer ini dibahas dalam tutorial ini.

Komponen utama:







Dua komponen utama dari objek unique_ptr disediakan di bawah ini:



A. Pointer Tersimpan:



Ini digunakan untuk mengelola objek yang dibuat oleh pointer unik. Itu dibuat pada saat pembuatan pointer, dan dapat diubah dengan cara yang berbeda.





B. Penghapus Tersimpan:

Dibutuhkan argumen tipe pointer yang disimpan yang digunakan untuk menghapus objek yang dikelola. Itu juga dibuat pada saat pembuatan pointer, dan dapat diubah dengan cara yang berbeda.



Contoh 1: Buat Objek Pointer dari Kelas Dengan Konstruktor

Cara mendeklarasikan objek pointer unik dari suatu kelas dan mengakses metode kelas adalah dengan menggunakan objek seperti yang ditunjukkan pada contoh berikut. Kelas dengan konstruktor dan metode publik telah dideklarasikan dalam kode. Konstruktor memiliki tiga argumen. Pointer unik pertama telah dibuat dengan memanggil konstruktor dengan tiga nilai argumen. NS Hasil() metode dipanggil oleh objek pointer yang menghitung jumlah dari tiga nilai argumen konstruktor. Selanjutnya, objek pointer unik kedua dibuat tanpa memanggil konstruktor, dan pointer pertama dipindahkan ke pointer kedua. NS Hasil() metode ini dipanggil oleh objek pointer kedua.

//Sertakan perpustakaan yang diperlukan

#termasuk

#termasuk

menggunakan namespace std;

//Tentukan kelasnya
penambahan kelas{

int angka1, angka2, angka3;
publik:
//Deklarasikan konstruktor
Tambahan(int a, int b, int c)
{
nomor1 = a;
angka2 = b;
angka3 = c;
}
//Deklarasikan metode untuk menghitungjumlah
int Hasil()
{
kembaliangka1 + angka2 + angka3;
}
};
int utama()
{
//Deklarasikan pointer pertama
unique_ptr pointer1(tambahan baru(Empat. Lima,55,30));

biaya<<'Hasil penjumlahan menggunakan pointer pertama :'<Hasil() <<' ';
//Deklarasikan pointer kedua
unique_ptr pointer2;
//Pindahkan pointer pertama ke pointer kedua
pointer2 = bergerak(penunjuk1);

biaya<<'Hasil penjumlahan menggunakan pointer kedua :'<Hasil() <<' ';
kembali0;
}

Keluaran:

Output berikut akan muncul setelah mengeksekusi kode di atas. Jumlah 45, 55, dan 30 adalah 130 yang telah dicetak untuk kedua pointer.

Contoh 2: Buat Objek Pointer dari Kelas Dengan Konstruktor dan Destructor

Cara mendeklarasikan objek pointer unik dari suatu kelas dengan konstruktor dan destruktor telah ditunjukkan pada contoh berikut. Kelas berisi konstruktor dengan satu argumen, metode publik bernama Display() dengan nilai variabel kelas, dan destruktor yang akan mencetak pesan penghancuran sebelum menghancurkan objek kelas. Metode Display() dipanggil setelah membuat objek penunjuk unik dalam kode.

//Sertakan perpustakaan yang diperlukan

#termasuk

#termasuk

menggunakan namespace std;

//Tentukan kelasnya
pelanggan kelas
{
nama string;

publik:
//Deklarasikan konstruktor
Pelanggan(string n)
{
nama = n;
biaya<<'Sumber daya dialokasikan. ';
}

//Deklarasikan metode untuk mencetak nama pelanggan
tampilan kosong()
{
biaya<<'Nama pelanggan adalah:'<<nama<<' ';
}

//Nyatakan destruktor
~Pelanggan()
{
biaya<<'Sumber daya dihancurkan. ';
}
};
int utama()
{
//Alokasikan objek Resource yang dimiliki oleh unique_ptr
unique_ptruPointer{pelanggan baru('Mir Abbas') };
uPointer->Menampilkan();
kembali0;
}

Keluaran:

Output berikut akan muncul setelah mengeksekusi kode di atas:

Contoh 3: Periksa Pointer Setelah Mentransfer Kepemilikan

Cara untuk memeriksa kepemilikan pointer unik telah ditunjukkan pada contoh berikut dengan membuat dua pointer unik dari suatu kelas. Kelas dengan dua variabel string dan metode publik telah dideklarasikan dalam kode. Metode Book_details() kelas dipanggil setelah membuat objek pointer unik pertama dari kelas. Selanjutnya, objek penunjuk unik kedua telah dibuat, dan penunjuk pertama telah dipindahkan ke penunjuk kedua yang menghancurkan penunjuk pertama. Kepemilikan kedua pointer harus diperiksa nanti.

//Sertakan perpustakaan yang diperlukan

#termasuk

#termasuk

menggunakan namespace std;

//Tentukan kelasnya
buku kelas{

judul string ='Bahasa Pemrograman C++';
penulis string ='Bjarne Stroustrup';

publik:
//Deklarasikan metode untuk mencetak detail buku
voidBook_details()
{
biaya<<'Nama Buku:'<<judul<<' ';
biaya<<'Nama Penulis:'<<Pengarang<<' ';
}
};
int utama()
{
//Deklarasikan pointer pertama
unique_ptr pointer1(buku baru());

penunjuk1->Detail_buku();
//Deklarasikan pointer kedua
unique_ptr pointer2;
//Pindahkan pointer pertama ke pointer kedua
pointer2 = bergerak(penunjuk1);

//Periksa penunjuk pertama
jika (static_cast(penunjuk1))biaya<<'Penunjuk pertama bukan nol ';
laincout<<'Penunjuk pertama adalah nol ';
//Periksa penunjuk kedua
jika (static_cast(penunjuk2))biaya<<'Penunjuk kedua bukan nol ';
laincout<<'Penunjuk kedua adalah nol ';

kembali0;
}

Keluaran:

Output berikut akan muncul setelah mengeksekusi kode di atas. Menurut output, kepemilikan pointer pertama telah dihapus, dan pesannya, Pointer pertama adalah null telah dicetak untuk pointer pertama. Kepemilikan pointer kedua ada, dan pesannya, Pointer pertama bukan null telah dicetak untuk pointer kedua:

Kesimpulan:

Tujuan menggunakan pointer unik dalam pemrograman C++ telah dijelaskan dalam tutorial ini dengan menggunakan beberapa contoh. Cara membuat pointer unik, mentransfer kepemilikan pointer, dan memeriksa kepemilikan pointer saat ini telah dijelaskan di sini untuk membantu pembaca mengetahui penggunaan pointer unik dengan benar.