2013-08-30 2 views

ответ

9

Похоже, место размещения новое. Это то же самое, что и обычный оператор new, но вместо фактического выделения памяти он использует уже имеющуюся память и на которую указывает выражение внутри круглых скобок.

В вашем случае она использует память в vv[i], чтобы создать новый объект vertex, а затем возвращает указатель на что (т.е. &vv[i]) и он назначен v[i].

См., Например, this reference для более подробной информации.

+1

Исправить. Заметьте, что «размещение нового» имеет значение в стандарте, что более инклюзивно, чем просто «вызов ctor на этот бит памяти». – MSalters

+0

Кроме того, использование ' delete 'для этого места размещения является своеобразным. Вы можете видеть, что он делает явный вызов деструктора. –

+0

'& vv [i]' должен быть эквивалентен 'vv + i', правильно? – Graznarak

2

Это placement new-expression.

Он строит новый объект в уже выделенной памяти - по адресу vv[i].

Это называют это allocation function:

operator new(std::size_t, void*); 
//      ^^^^ 
//      &vv[i] is passed here 

, который просто возвращает второй аргумент. Затем строится конструктор vertex, который соответствует количеству аргументов их типов, чтобы построить объект на месте.

1

Да, это место размещения новое, оно выделяет адрес, в котором находится новый объект. Если ваш (& vv [i]) равен 0xabcdef00, ваш новый объект будет в 0xabcdef00, более detial вы можете проверить стандарт C++ 5.3.4.

Смежные вопросы