簡體   English   中英

C ++派生對象數據在基礎對象std :: swap后保證有效嗎?

[英]C++ Is derived object data guaranteed valid after a base object std::swap?

做這樣的事情是安全的:

class Base { public: int x; };
class Derived : public Base { public: int y; };
Base b;
Derived d;
b.x = 1;
d.x = 2;
d.y = 3;
std::swap(b,d);

此時是否保證派生信息dy仍然有效? 換句話說,我只是交換基礎對象,但派生數據仍然有效,對嗎? 還有,這被認為是切片嗎?

編輯:在評論中,有人指出這將無法編譯。 將d中的基礎數據與b交換的最佳方法是什么? 請記住,b顯然要比我的例子復雜得多。

這完全取決於您對有效性的定義以及問題范圍的精確程度。 在一般情況下,僅交換基數將無效 ,因為派生類型可能會強制執行可能被破壞的其他不變量。

在特定情況下,您沒有不變量,所有公共數據(在修復類型定義以便下面的代碼編譯之后)數據將被交換,並且很可能不會導致任何問題(假設:交換的變化可能通過直接訪問成員來手動完成,因此swap不會破壞任何不會被破壞的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM