将相同的 unique_ptr 移动到循环中的函数中
Move the same unique_ptr into function in a loop
重新设计以下容易出错的代码的最佳方法是什么:
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 函数。
如果您不想转让所有权,只需传递原始指针或引用即可。如果函数要存储指针,则 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){
..........
}
通过(可选 const
)对方法 B 的引用传递它。
所以不用
void ClassA::methodB(std::unique_ptr<ClassB::ISomeInterface> obj);
您可以拥有以下任何一项
void ClassA::methodB(const ClassB::ISomeInterface& obj);
或
void ClassA::methodB(ClassB::ISomeInterface& obj);
重新设计以下容易出错的代码的最佳方法是什么:
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 函数。
如果您不想转让所有权,只需传递原始指针或引用即可。如果函数要存储指针,则 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){
..........
}
通过(可选 const
)对方法 B 的引用传递它。
所以不用
void ClassA::methodB(std::unique_ptr<ClassB::ISomeInterface> obj);
您可以拥有以下任何一项
void ClassA::methodB(const ClassB::ISomeInterface& obj);
或
void ClassA::methodB(ClassB::ISomeInterface& obj);