У меня есть это:
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 способ инициализации массива. Обратите внимание, что код чувствителен к производительности и использование вектора не вариант.
Конструктор по умолчанию intrusive_ptr
имеет постусловие, что get () == 0 в соответствии с документы. Поэтому для создания значений массива по умолчанию просто вставьте пару фигурных скобок (равномерная инициализация) после new
, вот так:
boost::scoped_array<NodeSPtr> nodes(new NodeSPtr[size]{});
Вы также можете использовать круглые скобки, если не можете использовать единый синтаксис инициализации.
Других решений пока нет …