溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中怎么使用delete禁止默認(rèn)行為

發(fā)布時間:2021-11-29 11:51:37 來源:億速云 閱讀:140 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“C++中怎么使用delete禁止默認(rèn)行為”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++中怎么使用delete禁止默認(rèn)行為”吧!

如果不需要默認(rèn)(同時不需要其他選項)行為,使用=delete禁止它們    

Reason(原因)

某些情況下·,也有可能·不希望存在默認(rèn)行為。   

Example(示例)
 
class Immortal {
public:
   ~Immortal() = delete;   // do not allow destruction
   // ...
};

void use()
{
   Immortal ugh;   // error: ugh cannot be destroyed
   Immortal* p = new Immortal{};
   delete p;       // error: cannot destroy *p
}
Example(示例) 

獨占指針可以被移動,但是不能被拷貝。為了實現(xiàn)這一點,代碼禁止了拷貝操作。禁止拷貝的方法是將源自左值的拷貝操作聲明為=delete。 

template <class T, class D = default_delete<T>> class unique_ptr {
public:
   // ...
   constexpr unique_ptr() noexcept;
   explicit unique_ptr(pointer p) noexcept;
   // ...
   unique_ptr(unique_ptr&& u) noexcept;   // move constructor
   // ...
   unique_ptr(const unique_ptr&) = delete; // disable copy from lvalue
   // ...
};

unique_ptr<int> make();   // make "something" and return it by moving

void f()
{
   unique_ptr<int> pi {};
   auto pi2 {pi};      // error: no move constructor from lvalue
   auto pi3 {make()};  // OK, move: the result of make() is an rvalue
}

注意:禁止的函數(shù)應(yīng)該是公有的    

按照慣例,被刪除函數(shù)(deleted functions)聲明為public,而不是private。當(dāng)用戶代碼嘗試調(diào)用一個成員函數(shù)時,C++會在檢查它的刪除狀態(tài)位之前檢查它的可獲取性(accessibility,即是否為public?)。當(dāng)用戶嘗試調(diào)用一個聲明為private的刪除函數(shù)時,一些編譯器會抱怨這些刪除的函數(shù)被聲明為private 

Enforcement(實施建議)

消除默認(rèn)操作(應(yīng)該)應(yīng)該基于類的期待語義。懷疑這些類,但同時維護(hù)類的“正面清單”,其內(nèi)容是由人斷定是正確的東西。

感謝各位的閱讀,以上就是“C++中怎么使用delete禁止默認(rèn)行為”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C++中怎么使用delete禁止默認(rèn)行為這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI