想象一下,你有一堆unique_ptr
的东西(一个简化的int),如:
std::stack< std::unique_ptr<int> > numbers;
numbers.push( std::unique_ptr<int>( new int(42)) );
但是如果你尝试使用top元素,而不从堆栈中获取它,你将收到编译错误:
if( not numbers.empty() ){
auto lastone = numbers.top();
std::cout << "last " << *lastone << std::endl;
}
你应该移出元素,使用它,然后再次放入堆栈:
if( not numbers.empty() ){
auto lastone = std::move(numbers.top());
numbers.pop();
std::cout << "last " << *lastone << std::endl;
numbers.push( std::move(lastone) );
}
有更好的方法吗?
答案 0 :(得分:4)
如果您不打算实际弹出元素但只是想在其中使用它,只需使用引用:
auto& lastone = numbers.top();
std::cout << "last " << *lastone << std::endl;