Возможно, вы захотите сделать это для оптимизации (это быстрее не перераспределять все время), но вам нужно повторно -конструировать объект несколько раз. Если вам нужно перераспределять ресурсы, было бы более эффективно выделять больше, чем вам нужно, даже если вы еще не хотите его использовать.
Devex дает хороший пример :
Стандартный C ++ также поддерживает оператор размещения new, который строит объект в предварительно выделенном буфере. Это полезно при создании пула памяти, сборщика мусора или просто в том случае, когда безопасность производительности и исключений является первостепенной (нет опасности сбоя распределения, поскольку память уже выделена, а построение объекта в предварительно выделенном буфере занимает меньше времени) :
blockquote>char *buf = new char[sizeof(string)]; // pre-allocated buffer string *p = new (buf) string("hi"); // placement new string *q = new string("hi"); // ordinary heap allocation
Вы также можете быть уверены, что в определенной части критического кода может отсутствовать отказ в распределении (возможно, вы работаете на кардиостимуляторе, например). В этом случае вы захотите использовать новое место размещения.
Освобождение места размещения new
Вы не должны освобождать все объекты, которые используют буфер памяти. Вместо этого вы должны удалить [] только исходный буфер. Затем вам придется вручную вызвать деструкторов ваших классов вручную. Для хорошего предложения по этому вопросу см. FAQ по Stroustrup: Есть ли «удаление места размещения» ?
Есть небольшое изменение, которое вы можете сделать, чтобы получить правильные данные в вашем цикле for.
var sPath =
blockquote>TreeTable.getRows()[0].getBindingContext()
- Получить данные из модели в виде:
[111 ]
blockquote>
Вот как я это решил:
var oJSON = {};
var aData = [];
var oTable = this.getView().byId("TreeTable");
var aIndicies = oTable.getSelectedIndices();
var oSelect = this.getView().byId("selectStandort").getSelectedKey();
for (var i=0; i<aIndicies.length; i++) {
var oTableContext = oTable.getContextByIndex(aIndicies[i]);
var rowData = oTable.getModel("jobs").getProperty(oTableContext.getPath());
aData.push(rowData);
}
oJSON.jobs = aData;
oJSON.standort = oSelect;