列表中的原始与唯一指针

时间:2013-07-19 13:11:03

标签: c++ unique-ptr

假设我有某个T类的std :: list。

管理这些元素的最佳方法是什么?考虑到只有经理(我的意思是 - 一个所有者)可以在列表中添加或删除项目。

1)

std::list < T* > myList;

//adding the new element
myList.push_back( new T(..) );

//deleting the one element
...roaming through the list...got it...
delete *iterator;
myList.erase(iterator);

2)

std::list < std::unique_ptr<T> > myList;

//adding the new element
myList.push_back ( std::unique_ptr<T>( new T(..) );

//deleting the one element
...roaming through the list...got it...
myList.erase(iterator);

2 个答案:

答案 0 :(得分:3)

Herb Sutter's GotW column的话说:

  

指南:要分配对象,请更喜欢编写make_unique   默认,并在知道对象的生命周期时编写make_shared   将使用shared_ptrs进行管理。

std::list < std::unique_ptr<T> > myList;

//adding the new element
myList.push_back ( std::make_unique<T>(..) );

//deleting the one element
...roaming through the list...got it...
myList.erase(iterator);

您可以将Stephan T. Lavavej的accepted C+14 proposal用于std :: make_unique实现。

答案 1 :(得分:1)

如果程序中的所有权模型是列表“拥有”其中的元素,则第二种方式(即使用unique_ptr<T>)更好。它允许C ++自动管理列表的资源,这在列表在本地范围内声明的情况下尤其重要,因为您不必担心过早退出范围。