[英]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.