簡體   English   中英

我應該通過 unique_ptr<t> 在這里參考?</t>

[英]Should I be passing unique_ptr<T> by reference here?

我最初發現了一些(令人討厭的)代碼來更新指向指針的指針,這樣做:

void func(X** ptr2ptr, X* oldx){

    X* x2 = new X();
    x2->a(oldx->a);
    // etc

    delete *ptr2ptr;
    *ptr2ptr = x2;
    oldx = *ptr2ptr;
}

你可以想象,這太可怕了。

我重構了上面的方法並從外部包裝器調用它,然后是另一個使用更新指針的方法(見下文)。 但是,似乎我的更新 memory 在調用 anotherMethod() 之前被刪除了,因為我遇到了段錯誤:

void wrapper(std::unique_ptr<X>& x){
    func(x);
    anotherMethod(x);
}

void func(std::unique_ptr<X>& x){
    std::unique_ptr<X> x2(new X());
    // same assignment as before

    x = std::move(x2);
}

void anotherMethod(std::unique_ptr<X>& x){
    // Seg fault occurs here whilst accessing x class member
}

有人可以幫忙嗎? 我認為我正在使用 std::move() 並通過引用傳遞 unique_ptr 來做正確的事情。

舊代碼不僅僅是“移動”指針:它將a成員保留在結構中。

嘗試這樣的事情:

void func(std::unique_ptr<X>& x){
    auto old_a = x->a;

    x = new X;

    x->a = old_a;
}

暫無
暫無

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

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