C++中怎么使用delete禁止默認行為

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

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的東陽網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

Reason(原因)

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

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(實施建議)

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

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

網(wǎng)頁名稱:C++中怎么使用delete禁止默認行為
網(wǎng)頁路徑:http://muchs.cn/article8/ihjjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、微信小程序、域名注冊、網(wǎng)站制作、網(wǎng)站維護營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)