c++ - How to properly forward unique_ptr? -
what proper way forward std::unique_ptr?
the following code uses std::move
, thought considered practice, crashes clang.
class c { int x; } unique_ptr<c> transform1(unique_ptr<c> p) { return transform2(move(p), p->x); // <--- oops! access p after move construction takes place, compiler-dependant } unique_ptr<c> transform2(unique_ptr<c> p, int val) { p->x *= val; return p; }
is there more robust convention making sure need p
before transferring ownership next function via std::move
? seems me using move
on object , accessing provide parameter same function call common mistake make.
since not need access p
after moved, 1 way p->x
before move , use it.
example:
unique_ptr<c> transform1(unique_ptr<c> p) { int x = p->x; return transform2(move(p), x); }
Comments
Post a Comment