![](/img/trans.png)
[英]C++ How to set a pointer of type std::vector<Derived*> to object of type std::vector<Base*>
[英]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.