使用 boost 侵入式指针初始化数组的最时尚方式
Posted
技术标签:
【中文标题】使用 boost 侵入式指针初始化数组的最时尚方式【英文标题】:most STLish way to init array with boost intrusive pointers 【发布时间】:2013-12-25 18:01:05 【问题描述】:我有这个:
struct Node;
typedef boost::intrusive_ptr<Node> NodeSPtr;
...
boost::scoped_array<NodeSPtr> nodes(new NodeSPtr[size]);
...
// "pollute" operations ...
...
// reset all the items in the array
for (size_t i = 0; i < size; ++i)
nodes[i].reset();
什么是初始化数组的最干净、更 STLish 的方法。请注意,代码对性能敏感,不能选择使用向量。
【问题讨论】:
我不完全确定你想要什么。您似乎只想重置scoped_array
。 boost::scoped_array
中有一个Reset()函数。
scoped_array 重置会释放数组中的所有项目,但不会重置它们
【参考方案1】:
intrusive_ptr
的默认构造函数根据docs 有一个 get() == 0 的后置条件。因此,要默认构造数组值,只需在 new
之后粘贴一对花括号(统一初始化),如下所示:
boost::scoped_array<NodeSPtr> nodes(new NodeSPtr[size]);
如果不能使用统一初始化语法,也可以使用括号。
【讨论】:
初始初始化没问题。问题是在其他点将数组重置为 NULL 指针 我明白了,除了你已经说过的for
循环之外,我认为没有真正的好方法可以做到这一点。如果您希望它看起来更好一点,也可以尝试std::fill_n
或其他东西。以上是关于使用 boost 侵入式指针初始化数组的最时尚方式的主要内容,如果未能解决你的问题,请参考以下文章