Переместите тот же unique_ptr в функцию в цикле - PullRequest
0 голосов
/ 10 ноября 2018

Как лучше всего перепроектировать следующий подверженный ошибкам код:

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 голосов
/ 10 ноября 2018

Передайте его (необязательно const) по ссылке на метод B.

Так что вместо

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

Вы можете иметь любой из следующих

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

или

void ClassA::methodB(ClassB::ISomeInterface& obj);
0 голосов
/ 10 ноября 2018

Если вы не хотите передавать право собственности, просто передайте необработанный указатель или ссылку. Если функции будут хранить указатель, то 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){
      ..........
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...