簡體   English   中英

深拷貝和動態轉換 unique_ptr

[英]deep copy and dynamic cast unique_ptr

假設我有一個如下所示的類:

class A { virtual ~A(); ... }
class B : public A { ... }
class C : public A { ... }

我還有一個以這種方式聲明的 unique_ptr 向量:

std::vector<std::unique_ptr<A>> vec;

假設 vec 用 unique_ptr 填充到派生類的對象。 如果我想要任何向量元素(b 或 c)的深層副本,並讓基類 unique_ptr 指向它,我該怎么辦? 最初我在做類似的事情

std::unique_ptr<A> tmp = std::make_unique<A>(*b);

我不認為這是正確的。

一種可能的解決方案是在基類中聲明一個虛擬克隆方法並為每個子類覆蓋它:

class A {
    virtual ~A() {}
    virtual std::unique_ptr<A> clone() const = 0;
}
class B : public A {
    std::unique_ptr<A> clone() const override {
        return std::unique_ptr<A>(new B(*this));
    }
};

編輯:

一個使用示例:

void f(const A& original) {
    std::unique_ptr<A> copy = original.clone();
    // Here, copy points to an instance of class B.
}

暫無
暫無

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

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