第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么構(gòu)成C ++ 11中“移動”對象的有效狀態(tài)?

什么構(gòu)成C ++ 11中“移動”對象的有效狀態(tài)?

C++
人到中年有點甜 2019-08-28 10:17:24
什么構(gòu)成C ++ 11中“移動”對象的有效狀態(tài)?我一直在試圖解決C ++ 11中的移動語義應(yīng)該如何工作,而且我很難理解移動對象需要滿足的條件??纯催@里的答案并沒有真正解決我的問題,因為無法看到如何以合理的方式將它應(yīng)用于pimpl對象,盡管移動語義的參數(shù)非常適合pimpls。我的問題最簡單的說明涉及pimpl習(xí)語,如下所示:class Foo {     std::unique_ptr<FooImpl> impl_;public:     // Inlining FooImpl's constructors for brevity's sake; otherwise it      // defeats the point.     Foo() : impl_(new FooImpl()) {}     Foo(const Foo & rhs) : impl_(new FooImpl(*rhs.impl_)) {}     Foo(Foo && rhs) : impl_(std::move(rhs.impl_)) {}     Foo & operator=(Foo rhs)      {         std::swap(impl_, rhs.impl_);         return *this;     }     void do_stuff ()      {         impl_->do_stuff;     }};現(xiàn)在,一旦我離開了,我該怎么辦Foo?我可以安全地銷毀移動的物體,我可以分配給它,這兩者都絕對是至關(guān)重要的。但是,如果我嘗試do_stuff使用我的Foo,它會爆炸。在我為我的定義添加移動語義之前Foo,每個人都Foo滿足了它的不變性do_stuff,而現(xiàn)在已不再是這樣了。似乎沒有很多很好的替代方案,因為(例如)將移動放入Foo將涉及新的動態(tài)分配,這部分地違背了移動語義的目的。我可以檢查是否impl_輸入do_stuff并將其初始化為默認(rèn)值FooImpl 如果是,但是這會增加(通常是假的)檢查,如果我有很多方法,那就意味著要記住每一個檢查。我應(yīng)該放棄能夠do_stuff成為合理的不變量的想法嗎?
查看完整描述

2 回答

?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊

但是,如果我嘗試用我的Foo do_stuff,它會爆炸。

是。這樣:

vector<int> first = {3, 5, 6};vector<int> second = std::move(first);first.size();  //Value returned is undefined. May be 0, may not

標(biāo)準(zhǔn)使用的規(guī)則是將對象保留為有效(意味著對象有效)但未指定狀態(tài)。這意味著您可以調(diào)用的唯一函數(shù)是那些對對象的當(dāng)前狀態(tài)沒有條件的函數(shù)。對于vector,您可以使用它的復(fù)制/移動賦值運算符,以及clearempty等幾個操作。所以你可以這樣做:

vector<int> first = {3, 5, 6};vector<int> second = std::move(first);first.clear();  //Cause the vector to become empty.first.size(); //Now the value is guaranteed to be 0.

對于您的情況,復(fù)制/移動分配(從任何一方)應(yīng)該仍然有效,析構(gòu)函數(shù)也應(yīng)如此。但是你的所有其他功能都有一個基于未被移動的狀態(tài)的前提條件。

所以我沒有看到你的問題。

如果你想確保沒有Pimpl'd類的實例可以為空,那么你將實現(xiàn)適當(dāng)?shù)膹?fù)制語義并禁止移動。運動需要物體處于空狀態(tài)的可能性。


查看完整回答
反對 回復(fù) 2019-08-28
  • 2 回答
  • 0 關(guān)注
  • 465 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號