Наиболее STLish способ инициализации массива с помощью интрузивных указателей

У меня есть это:

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 способ инициализации массива. Обратите внимание, что код чувствителен к производительности и использование вектора не вариант.

1

Решение

Конструктор по умолчанию intrusive_ptr имеет постусловие, что get () == 0 в соответствии с документы. Поэтому для создания значений массива по умолчанию просто вставьте пару фигурных скобок (равномерная инициализация) после new, вот так:

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

Вы также можете использовать круглые скобки, если не можете использовать единый синтаксис инициализации.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]