Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menyimpan pointer ke objek atau array yang dimiliki. Objek/array tidak dimiliki oleh .unique_ptr Objek/array dihancurkan ketika unique_ptr dihancurkan.
Sintaks
class unique_ptr {
public:
unique_ptr();
unique_ptr(nullptr_t Nptr);
explicit unique_ptr(pointer Ptr);
unique_ptr(pointer Ptr,
typename conditional<is_reference<Del>::value, Del,
typename add_reference<const Del>::type>::type Deleter);
unique_ptr(pointer Ptr,
typename remove_reference<Del>::type&& Deleter);
unique_ptr(unique_ptr&& Right);
template <class T2, Class Del2>
unique_ptr(unique_ptr<T2, Del2>&& Right);
unique_ptr(const unique_ptr& Right) = delete;
unique_ptr& operator=(const unique_ptr& Right) = delete;
};
//Specialization for arrays:
template <class T, class D>
class unique_ptr<T[], D> {
public:
typedef pointer;
typedef T element_type;
typedef D deleter_type;
constexpr unique_ptr() noexcept;
template <class U>
explicit unique_ptr(U p) noexcept;
template <class U>
unique_ptr(U p, see below d) noexcept;
template <class U>
unique_ptr(U p, see below d) noexcept;
unique_ptr(unique_ptr&& u) noexcept;
constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { } template <class U, class E>
unique_ptr(unique_ptr<U, E>&& u) noexcept;
~unique_ptr();
unique_ptr& operator=(unique_ptr&& u) noexcept;
template <class U, class E>
unique_ptr& operator=(unique_ptr<U, E>&& u) noexcept;
unique_ptr& operator=(nullptr_t) noexcept;
T& operator[](size_t i) const;
pointer get() const noexcept;
deleter_type& get_deleter() noexcept;
const deleter_type& get_deleter() const noexcept;
explicit operator bool() const noexcept;
pointer release() noexcept;
void reset(pointer p = pointer()) noexcept;
void reset(nullptr_t = nullptr) noexcept;
template <class U>
void reset(U p) noexcept = delete;
void swap(unique_ptr& u) noexcept; // disable copy from lvalue unique_ptr(const unique_ptr&) = delete;
unique_ptr& operator=(const unique_ptr&) = delete;
};
Parameter
Right
unique_ptr.
Nptr
Jenis rvalue std::nullptr_t.
Ptr
pointer.
Deleter
Fungsi deleter yang terikat ke unique_ptr.
Pengecualian
Tidak ada pengecualian yang dihasilkan oleh unique_ptr.
Keterangan
Kelas unique_ptr menggantikan auto_ptr, dan dapat digunakan sebagai elemen kontainer Pustaka Standar C++.
Gunakan fungsi pembantu make_unique untuk membuat instans baru secara efisien dari unique_ptr.
unique_ptr mengelola sumber daya secara unik. Setiap unique_ptr objek menyimpan pointer ke objek yang dimilikinya atau menyimpan pointer null. Sumber daya dapat dimiliki oleh tidak lebih dari satu unique_ptr objek; ketika objek yang memiliki unique_ptr sumber daya tertentu dihancurkan, sumber daya dibebaskan. Objek unique_ptr dapat dipindahkan, tetapi tidak disalin; untuk informasi selengkapnya, lihat Deklarator Referensi Rvalue: &&.
Sumber daya dibesarkan dengan memanggil deleter objek jenis Del tersimpan yang mengetahui bagaimana sumber daya dialokasikan untuk tertentu unique_ptr. Default deleter default_delete<T> mengasumsikan bahwa sumber daya yang dialokasikan oleh ptr dialokasikan dengan new, dan dapat dibebaskan dengan memanggil delete _Ptr. (Spesialisasi unique_ptr<T[]>parsial mengelola objek array yang dialokasikan dengan new[], dan memiliki default deleter default_delete<T[]>, khusus untuk memanggil delete[] ptr.)
Pointer yang disimpan ke sumber daya yang dimiliki, stored_ptr memiliki jenis pointer. Ini Del::pointer jika didefinisikan, dan T * jika tidak. Objek stored_deleter yang disimpan deleter tidak menempati ruang dalam objek jika tanpa statusdeleter. Perhatikan bahwa Del bisa menjadi jenis referensi.
Anggota
Konstruktor
| Nama | Deskripsi |
|---|---|
unique_ptr |
Ada tujuh konstruktor untuk unique_ptr. |
Typedefs
| Nama | Deskripsi |
|---|---|
deleter_type |
Sinonim untuk parameter Deltemplat . |
element_type |
Sinonim untuk parameter Ttemplat . |
pointer |
Sinonim untuk Del::pointer jika ditentukan, jika tidak T *. |
Fungsi
| Nama | Deskripsi |
|---|---|
get |
Menampilkan stored_ptr. |
get_deleter |
Mengembalikan referensi ke stored_deleter. |
release |
pointer() menyimpan dan stored_ptr mengembalikan isi sebelumnya. |
reset |
Merilis sumber daya yang saat ini dimiliki dan menerima sumber daya baru. |
swap |
Bertukar sumber daya dan deleter dengan yang disediakan unique_ptr. |
Operator
| Nama | Deskripsi |
|---|---|
operator bool |
Operator mengembalikan nilai jenis yang dapat dikonversi ke bool. Hasil konversi bool menjadi adalah true ketika get() != pointer(), jika tidak false. |
operator-> |
Fungsi anggota mengembalikan stored_ptr. |
operator* |
Fungsi anggota mengembalikan *stored_ptr. |
operator= |
Menetapkan nilai unique_ptr (atau a pointer-type) ke saat ini unique_ptr. |
deleter_type
Jenisnya adalah sinonim untuk parameter Deltemplat .
typedef Del deleter_type;
Keterangan
Jenisnya adalah sinonim untuk parameter Deltemplat .
element_type
Jenisnya adalah sinonim untuk parameter Typetemplat .
typedef Type element_type;
Keterangan
Jenisnya adalah sinonim untuk parameter Tytemplat .
get
Menampilkan stored_ptr.
pointer get() const;
Keterangan
Fungsi anggota mengembalikan stored_ptr.
get_deleter
Mengembalikan referensi ke stored_deleter.
Del& get_deleter();
const Del& get_deleter() const;
Keterangan
Fungsi anggota mengembalikan referensi ke stored_deleter.
operator=
Menetapkan alamat yang disediakan unique_ptr untuk alamat saat ini.
unique_ptr& operator=(unique_ptr&& right);
template <class U, Class Del2>
unique_ptr& operator=(unique_ptr<Type, Del>&& right);
unique_ptr& operator=(pointer-type);
Parameter
Referensi yang unique_ptr digunakan untuk menetapkan nilai ke saat ini unique_ptr.
Keterangan
Fungsi anggota memanggil reset(right.release()) dan pindah right.stored_deleter ke stored_deleter, lalu mengembalikan *this.
pointer
Sinonim untuk Del::pointer jika ditentukan, jika tidak Type *.
typedef T1 pointer;
Keterangan
Jenisnya adalah sinonim untuk Del::pointer jika ditentukan, jika tidak Type *.
release
Merilis kepemilikan pointer tersimpan yang dikembalikan ke pemanggil dan mengatur nilai pointer tersimpan ke nullptr.
pointer release();
Keterangan
Gunakan release untuk mengambil alih kepemilikan pointer mentah yang disimpan oleh unique_ptr. Pemanggil bertanggung jawab untuk menghapus pointer yang dikembalikan. unique-ptr diatur ke status kosong yang dibangun default. Anda dapat menetapkan penunjuk lain dari jenis yang kompatibel ke unique_ptr setelah panggilan ke release.
Contoh
Contoh ini menunjukkan bagaimana pemanggil rilis bertanggung jawab atas objek yang dikembalikan:
// stl_release_unique.cpp
// Compile by using: cl /W4 /EHsc stl_release_unique.cpp
#include <iostream>
#include <memory>
struct Sample {
int content_;
Sample(int content) : content_(content) {
std::cout << "Constructing Sample(" << content_ << ")" << std::endl;
}
~Sample() {
std::cout << "Deleting Sample(" << content_ << ")" << std::endl;
}
};
void ReleaseUniquePointer() {
// Use make_unique function when possible.
auto up1 = std::make_unique<Sample>(3);
auto up2 = std::make_unique<Sample>(42);
// Take over ownership from the unique_ptr up2 by using release
auto ptr = up2.release();
if (up2) {
// This statement does not execute, because up2 is empty.
std::cout << "up2 is not empty." << std::endl;
}
// We are now responsible for deletion of ptr.
delete ptr;
// up1 deletes its stored pointer when it goes out of scope.
}
int main() {
ReleaseUniquePointer();
}
Constructing Sample(3)
Constructing Sample(42)
Deleting Sample(42)
Deleting Sample(3)
reset
Mengambil kepemilikan parameter pointer, lalu menghapus pointer asli yang disimpan. Jika pointer baru sama dengan pointer asli yang disimpan, reset menghapus pointer dan mengatur pointer tersimpan ke nullptr.
void reset(pointer ptr = pointer());
void reset(nullptr_t ptr);
Parameter
ptr
Penunjuk ke sumber daya untuk mengambil kepemilikan.
Keterangan
Gunakan reset untuk mengubah yang disimpan pointer yang dimiliki oleh ke unique_ptr ptr lalu hapus pointer asli yang disimpan. unique_ptr Jika tidak kosong, reset panggil fungsi deleter yang dikembalikan oleh get_deleter pada pointer asli yang disimpan.
Karena reset pertama-tama menyimpan pointer ptrbaru , lalu menghapus pointer asli yang disimpan, dimungkinkan untuk reset segera menghapus ptr jika sama dengan pointer asli yang disimpan.
swap
Menukar pointer di antara dua unique_ptr objek.
void swap(unique_ptr& right);
Parameter
right
Digunakan unique_ptr untuk menukar pointer.
Keterangan
Fungsi anggota bertukar stored_ptr dengan right.stored_ptr dan stored_deleter dengan right.stored_deleter.
unique_ptr
Ada tujuh konstruktor untuk unique_ptr.
unique_ptr();
unique_ptr(nullptr_t);
explicit unique_ptr(pointer ptr);
unique_ptr(
Type* ptr,
typename conditional<
is_reference<Del>::value,
Del,
typename add_reference<const Del>::type>::type _Deleter);
unique_ptr(pointer ptr, typename remove_reference<Del>::type&& _Deleter);
unique_ptr(unique_ptr&& right);
template <class Ty2, Class Del2>
unique_ptr(unique_ptr<Ty2, Del2>&& right);
Parameter
ptr
Penunjuk ke sumber daya yang akan ditetapkan ke unique_ptr.
_Deleter
yang deleter akan ditetapkan ke unique_ptr.
right
rvalue reference ke unique_ptr bidang tempat unique_ptr pemindahan ditetapkan ke yang baru dibangun unique_ptr.
Keterangan
Dua konstruktor pertama membuat objek yang tidak mengelola sumber daya. Konstruktor ketiga menyimpan ptr di stored_ptr. Konstruktor keempat menyimpan ptr dalam stored_ptr dan deleter di stored_deleter.
Konstruktor kelima menyimpan ptr dan stored_ptr pindah deleter ke stored_deleter. Konstruktor keenam dan ketujuh menyimpan right.release() dan stored_ptr pindah right.get_deleter() ke stored_deleter.
~unique_ptr
Destruktor untuk unique_ptr, menghancurkan unique_ptr objek.
~unique_ptr();
Keterangan
Destruktor memanggil get_deleter()(stored_ptr).