簡體   English   中英

如何獲得具有唯一指針的多態行為?

[英]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 ),從DerivedBase隱式轉換都應該絕對沒有問題。

暫無
暫無

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

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