如何做一堆unique_ptr

时间:2013-09-29 16:16:26

标签: c++11 containers

想象一下,你有一堆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) );
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

如果您不打算实际弹出元素但只是想在其中使用它,只需使用引用:

auto& lastone = numbers.top();
std::cout << "last " << *lastone << std::endl;