1

想象一下,您有一堆unique_ptr东西(要简化的 int),例如:

std::stack< std::unique_ptr<int> > numbers;
numbers.push( std::unique_ptr<int>( new int(42)) );

但是如果你尝试使用顶部元素,而不是从堆栈中获取它,你会得到一个编译错误:

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) );
}

有一个更好的方法吗?

4

1 回答 1

4

如果您不打算实际弹出元素而只想就地使用它,只需使用参考:

auto& lastone = numbers.top();
std::cout << "last " << *lastone << std::endl;
于 2013-09-29T16:18:51.520 回答