5

假设我有一些 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);
4

2 回答 2

3

Herb Sutter 的 GotW 专栏的话来说:

指导:要分配一个对象,最好默认写make_unique,当你知道对象的生命周期将使用shared_ptrs来管理时,写make_shared。

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接受的 C+14 提案用于 std::make_unique 实现。

于 2013-07-19T13:13:40.837 回答
1

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

于 2013-07-19T13:15:43.367 回答