Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sahip olunan bir nesne veya diziye yönelik bir işaretçi depolar. Nesne/dizi başka unique_ptrhiçbir öğesine ait değildir. nesnesi/dizisi yok edildiğinde unique_ptr yok edilir.
Sözdizimi
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;
};
Parametreler
Right
Bir unique_ptr.
Nptr
türünde std::nullptr_tbir rvalue .
Ptr
Bir pointer.
Deleter
öğesine deleter bağlı bir unique_ptrişlev.
Özel durumlar
tarafından unique_ptrhiçbir özel durum oluşturulmaz.
Açıklamalar
unique_ptr sınıfı öğesinin yerini alır auto_ptrve C++ Standart Kitaplık kapsayıcılarının öğesi olarak kullanılabilir.
make_unique yeni örneklerini unique_ptrverimli bir şekilde oluşturmak için yardımcı işlevini kullanın.
unique_ptr bir kaynağı benzersiz bir şekilde yönetir. Her unique_ptr nesne, sahip olduğu nesnenin işaretçisini depolar veya null bir işaretçi depolar. Bir kaynak birden unique_ptr fazla nesneye ait olamaz; belirli bir kaynağa sahip olan bir unique_ptr nesne yok edildiğinde kaynak serbest olur. Bir unique_ptr nesne taşınabilir, ancak kopyalanamaz; daha fazla bilgi için bkz . Rvalue Başvuru Bildirimcisi: &&.
Kaynak, kaynakların belirli unique_ptrbir için nasıl ayrıldığını Del bilen türde bir saklı deleter nesne çağrılarak serbest bırakıldı. Varsayılan değer deleter default_delete<T> , tarafından ptr işaret edilen kaynağın ile newayrıldığını ve çağrılarak delete _Ptrserbest edilebileceğini varsayar. (Kısmi özelleştirmeunique_ptr<T[]>, ile new[]ayrılan dizi nesnelerini yönetir ve varsayılan default_delete<T[]>deleter olarak çağrısı delete[] ptriçin özelleştirilmiş olan .)
Sahip olunan bir kaynağın depolanan işaretçisi stored_ptr türüne pointersahiptir. Tanımlandıysa Del::pointer ve T * tanımlanmadıysa. durum bilgisi yoksadeleter, depolanan deleter nesne stored_deleter nesnede yer kaplamaz. Del Bunun bir başvuru türü olabileceğini unutmayın.
Üyeler
Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
unique_ptr |
için unique_ptryedi oluşturucu vardır. |
Tür tanımları
| Veri Akışı Adı | Açıklama |
|---|---|
deleter_type |
şablon parametresinin Deleş anlamlısı. |
element_type |
şablon parametresinin Teş anlamlısı. |
pointer |
Tanımlanmışsa için Del::pointer bir eş anlamlı, aksi takdirde T *. |
İşlevler
| Veri Akışı Adı | Açıklama |
|---|---|
get |
stored_ptr döndürür. |
get_deleter |
öğesine bir başvuru stored_deleterdöndürür. |
release |
içinde stored_ptr depolar pointer() ve önceki içeriğini döndürür. |
reset |
Şu anda sahip olunan kaynağı yayınlar ve yeni bir kaynağı kabul eder. |
swap |
Kaynağı ve deleter sağlanan unique_ptrile değiştirir. |
İşleçler
| Veri Akışı Adı | Açıklama |
|---|---|
operator bool |
işleci, türüne dönüştürülebilir boolbir değer döndürür. dönüştürme bool işleminin sonucu olduğunda get() != pointer()elde edilirtrue, aksi takdirde false. |
operator-> |
Üye işlevi döndürür stored_ptr. |
operator* |
Üye işlevi döndürür *stored_ptr. |
operator= |
Geçerli unique_ptröğesine (veya ) pointer-typedeğerini unique_ptr atar. |
deleter_type
türü, şablon parametresi Deliçin bir eş anlamlıdır.
typedef Del deleter_type;
Açıklamalar
türü, şablon parametresi Deliçin bir eş anlamlıdır.
element_type
türü, şablon parametresi Typeiçin bir eş anlamlıdır.
typedef Type element_type;
Açıklamalar
türü, şablon parametresi Tyiçin bir eş anlamlıdır.
get
stored_ptr döndürür.
pointer get() const;
Açıklamalar
Üye işlevi döndürür stored_ptr.
get_deleter
öğesine bir başvuru stored_deleterdöndürür.
Del& get_deleter();
const Del& get_deleter() const;
Açıklamalar
Üye işlevi öğesine stored_deleterbir başvuru döndürür.
operator=
Sağlanan unique_ptr adresini geçerli adrese atar.
unique_ptr& operator=(unique_ptr&& right);
template <class U, Class Del2>
unique_ptr& operator=(unique_ptr<Type, Del>&& right);
unique_ptr& operator=(pointer-type);
Parametreler
unique_ptr değerini geçerli unique_ptröğesine atamak için kullanılan başvuru.
Açıklamalar
Üye işlevleri çağrısı reset(right.release()) yapıp öğesine stored_deletergidinright.stored_deleter, ardından döndürür*this.
pointer
Tanımlanmışsa için Del::pointer bir eş anlamlı, aksi takdirde Type *.
typedef T1 pointer;
Açıklamalar
Türü, tanımlanmışsa için Del::pointer bir eş anlamlıdır, aksi takdirde Type *.
release
Döndürülen depolanmış işaretçinin sahipliğini çağıranı serbest bırakır ve depolanan işaretçi değerini olarak nullptrayarlar.
pointer release();
Açıklamalar
tarafından unique_ptrdepolanan ham işaretçinin sahipliğini devralmak için kullanınrelease. Çağıran, döndürülen işaretçinin silinmesinden sorumludur. unique-ptr, boş varsayılan olarak oluşturulduğunda durumuna ayarlanır. çağrısından releasesonra öğesine unique_ptr uyumlu türde başka bir işaretçi atayabilirsiniz.
Örnek
Bu örnek, yayın çağıranın döndürülen nesneden nasıl sorumlu olduğunu gösterir:
// 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
İşaretçi parametresinin sahipliğini alır ve özgün depolanan işaretçiyi siler. Yeni işaretçi özgün depolanan işaretçiyle aynıysa, reset işaretçiyi siler ve depolanan işaretçiyi olarak nullptrayarlar.
void reset(pointer ptr = pointer());
void reset(nullptr_t ptr);
Parametreler
ptr
Sahipliğini almak için kaynağın işaretçisi.
Açıklamalar
öğesinin sahip olduğu unique_ptr depolanmış pointer öğeyi ptr olarak değiştirmek ve ardından özgün depolanan işaretçiyi silmek için kullanınreset. unique_ptr boş değilse, reset tarafından döndürülen get_deleter deleter işlevini özgün depolanmış işaretçide çağırır.
İlk olarak reset yeni işaretçiyi ptrdepolayıp özgün depolanmış işaretçiyi sildiğinden, özgün depolanan işaretçiyle aynıysa hemen silmek ptr mümkündürreset.
swap
İşaretçileri iki unique_ptr nesne arasında değiştirir.
void swap(unique_ptr& right);
Parametreler
right
İşaretçileri unique_ptr değiştirmek için kullanılan.
Açıklamalar
Üye işlevi ile right.stored_ptr ve stored_deleter ile right.stored_deleterdeğiştirilirstored_ptr.
unique_ptr
için unique_ptryedi oluşturucu vardır.
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);
Parametreler
ptr
bir öğesine atanacak kaynağa ilişkin bir unique_ptrişaretçi.
_Deleter
A'ya deleter atanacak unique_ptr.
right
rvalue reference unique_ptr Yeni inşa edilen unique_ptr unique_ptröğesine alanların atandığı bir öğesine.
Açıklamalar
İlk iki oluşturucu hiçbir kaynağı yönetmez bir nesne oluşturur. Üçüncü oluşturucu ptr'yi içinde stored_ptrdepolar. Dördüncü oluşturucu ve içinde stored_ptr deleter stored_deleterdepolar.ptr
Beşinci oluşturucu içinde stored_ptr depolar ptr ve içine stored_deletertaşınırdeleter. Altıncı ve yedinci oluşturucular içinde depolar right.release() ve içine stored_deletertaşınırright.get_deleter().stored_ptr
~unique_ptr
için unique_ptryıkıcı bir unique_ptr nesneyi yok eder.
~unique_ptr();
Açıklamalar
Yok edici çağrısında bulunur get_deleter()(stored_ptr).