您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++中怎么使用delete禁止默認(rèn)行為”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++中怎么使用delete禁止默認(rèn)行為”吧!
如果不需要默認(rèn)(同時不需要其他選項)行為,使用=delete禁止它們
某些情況下·,也有可能·不希望存在默認(rèn)行為。
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
}
獨占指針可以被移動,但是不能被拷貝。為了實現(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
消除默認(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)注!
免責(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)容。