智慧型指標std unique ptr

2021-09-25 08:43:46 字數 1994 閱讀 6849

1) 任意時刻unique_ptr只能指向某乙個物件,指標銷毀時,指向的物件也會被刪除(通過內建刪除器,通過呼叫析構函式實現刪除物件)2)禁止拷貝和賦值(底層實現拷貝建構函式和複製建構函式= delete),可以使用std::move()、unique_ptr.reset(...) 轉移物件指標控制權。(由1決定,指標發生了拷貝就違反了第一條)

拷貝構造 和 賦值符『=』 對應函式 被刪除了,所以用不了。(看下面的建構函式表)

default (1)

constexpr unique_ptr() noexcept;

from null pointer (2)

constexpr unique_ptr (nullptr_t) noexcept : unique_ptr() {}

from pointer (3)

explicit unique_ptr (pointer p) noexcept;

from pointer + lvalue deleter (4)

unique_ptr (pointer p,

typename conditional::value,d,const d&> del) noexcept;

from pointer + rvalue deleter (5)

unique_ptr (pointer p,

typename remove_reference::type&& del) noexcept;

move (6)

unique_ptr (unique_ptr&& x) noexcept;

move-cast (7)

template unique_ptr (unique_ptr&& x) noexcept;

move from auto_ptr (8)

template unique_ptr (auto_ptr&& x) noexcept;拷貝構造
拷貝構造copy (deleted!) (9)

unique_ptr (const unique_ptr&)

=delete;

複製作業(刪除!)(4)

我們可以看到,拷貝和賦值函式被禁止實現(禁用)了。

更加詳細的內容參閱cppreference:

① std :: unique_ptr 構造   

② 賦值

1 #include 2 #include 3

using

namespace

std;45

//unique_ptr::get vs unique_ptr::release

6int

main()

7

智慧型指標 強弱智慧型指標

在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...

智慧型指標學習

最近接觸到智慧型指標很多,於是研究了一下智慧型指標的原理,寫下自己的心得體會,有不對的還請指正。智慧型指標產生的目的 因為在c 中,存在非常複雜的指標錯誤問題,例如,某個物件生成後,指向該物件的指標可能有多個,當我們用delete語句刪除其中的乙個指標後,物件就被銷毀,那麼其餘指向該物件的指標就會懸...

智慧型指標3

include include using namespace std define test smartptr class stub class sentry sentry private int lock template class refcountingtraits void unrefer...