循环将相同的unique_ptr移入函数

时间:2018-11-10 19:04:27

标签: c++ shared-ptr unique-ptr

重新设计以下易于出错的代码的最佳方法是什么:

void ClassA::methodA(std::unique_ptr<ClassB::ISomeInterface> obj){
    for (int i = 0; i < 10; i++) {
      methodB(std::move(obj)); // the obj pointer is undefined on second iteration here after the move
    }
  }

void ClassA::methodB(std::unique_ptr<ClassB::ISomeInterface> obj){
      ..........
}

目标是传递相同的unique_ptr多次运行。

2 个答案:

答案 0 :(得分:2)

如果您不想转让所有权,只需传递原始指针或引用即可。如果函数要存储指针,则shared_ptr更合适:

void ClassA::methodA(std::unique_ptr<ClassB::ISomeInterface> obj){
    for (int i = 0; i < 10; i++) {
      methodB(*obj);
    }
  }

void ClassA::methodB(ClassB::ISomeInterface& obj){
      ..........
}

答案 1 :(得分:1)

通过对方法B的引用(可选地const)来传递它。

所以不是

void ClassA::methodB(std::unique_ptr<ClassB::ISomeInterface> obj);

您可以选择以下任何一个

void ClassA::methodB(const ClassB::ISomeInterface& obj);

void ClassA::methodB(ClassB::ISomeInterface& obj);