C++11 我是否应该通过唯一的ptr<;T>;通过这里的引用?

C++11 我是否应该通过唯一的ptr<;T>;通过这里的引用?,c++11,move-semantics,unique-ptr,C++11,Move Semantics,Unique Ptr,我最初发现了一些(讨厌的)代码来将指针更新为指针,这样做: void func(X** ptr2ptr, X* oldx){ X* x2 = new X(); x2->a(oldx->a); // etc delete *ptr2ptr; *ptr2ptr = x2; oldx = *ptr2ptr; } 你可以想象,这太可怕了 我重构了上述方法,并从外部包装器调用它,然后是另一个使用更新指针的方法(见下文)。但是,在调用anot

我最初发现了一些(讨厌的)代码来将指针更新为指针,这样做:

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

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

    delete *ptr2ptr;
    *ptr2ptr = x2;
    oldx = *ptr2ptr;
}
你可以想象,这太可怕了

我重构了上述方法,并从外部包装器调用它,然后是另一个使用更新指针的方法(见下文)。但是,在调用anotherMethod()之前,我的更新内存似乎已被删除,因为我遇到seg故障:

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
}
void包装器(std::unique\u ptr&x){
func(x);
恒温法(x);
}
void func(标准::唯一\u ptr&x){
std::unique_ptr x2(新X());
//和以前一样的任务
x=std::move(x2);
}
void-anotherMethod(标准::unique_ptr&x){
//在访问x类成员时,此处发生Seg故障
}
有人能帮忙吗?我认为使用std::move()并通过引用传递唯一的ptr是正确的。

旧代码不仅仅是“移动”指针:它将
成员保留在结构中

试着这样做:

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

    x = new X;

    x->a = old_a;
}
void func(std::unique\u ptr&x){
自动旧_a=x->a;
x=新的x;
x->a=旧的;
}

Extrain您显示的代码<代码>oldx=*ptr2ptr