[英]How to make unique pointers to polymorphic classes using the ternary operator?
[英]How to obtain polymorphic behavior with unique pointers?
休息片刻后再玩C ++。
我有一個指向對象的唯一指針的std::vector
進行迭代,調用一個函數,該函數將派生vector
中對象的基類作為參數,如下所示:
for (auto const& object : objects)
{
_process(object);
}
objects
將在哪里:
std::vector<std::unique_ptr<Derived>>
我想了解如何執行多態行為來調用該函數:
_process(std::unique_ptr<Base> base)
std::unique_ptr
表示所有權,因此無法復制。
這意味着_process(std::unique_ptr<Base> base)
是一個接收器,即它消耗了對象(可以銷毀該對象或將其存儲在某個位置,但是調用者無法再對其進行控制了)。 為了調用它,您必須使用std::move
:
_process(std::move(object))
這樣,您將明確拒絕對該對象的所有權,並將其從容器中刪除(該指針將重置為nullptr
。
當然這只能通過非做const
參考。
如果您不想轉讓所有權,而只想對該對象做某事(名稱_process
似乎暗示了這一點),則應該傳遞常規的原始指針:
_process(Base* base);
...
for (auto const& object : objects)
{
_process(object.get());
}
除了控制對象的生存期外,原始指針對於所有其他方面仍然非常有用。
在兩種情況下(原始指針和unique_ptr
),從Derived
到Base
隱式轉換都應該絕對沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.