Первоначально я нашел (противный) код для обновления указателя на указатель, как это сделать:Должен ли я передавать unique_ptr <T> по ссылке здесь?
void func(X** ptr2ptr, X* oldx){
X* x2 = new X();
x2->a(oldx->a);
// etc
delete *ptr2ptr;
*ptr2ptr = x2;
oldx = *ptr2ptr;
}
, как вы можете себе представить, это ужасно.
Я реорганизовал вышеуказанный метод и вызвал его из внешней оболочки, а затем другой метод, который использует обновленный указатель (см. Ниже). Тем не менее, кажется, моя память обновление становится стерта до вызова 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 по ссылке.
Extrain код показать ... 'oldx = * ptr2ptr'? – EFenix