【问题标题】:most STLish way to init array with boost intrusive pointers使用 boost 侵入式指针初始化数组的最时尚方式
【发布时间】: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_arrayboost::scoped_array中有一个Reset()函数。
  • scoped_array 重置会释放数组中的所有项目,但不会重置它们

标签: c++ boost stl scoped-ptr


【解决方案1】:

intrusive_ptr 的默认构造函数根据docs 有一个 get() == 0 的后置条件。因此,要默认构造数组值,只需在 new 之后粘贴一对花括号(统一初始化),如下所示:

boost::scoped_array<NodeSPtr> nodes(new NodeSPtr[size]{});

如果不能使用统一初始化语法,也可以使用括号。

【讨论】:

  • 初始初始化没问题。问题是在其他点将数组重置为 NULL 指针
  • 我明白了,除了你已经说过的for 循环之外,我认为没有真正的好方法可以做到这一点。如果您希望它看起来更好一点,也可以尝试std::fill_n 或其他东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多