История изменений
Исправление dissident, (текущая версия) :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
// Do smth with objs
for (int i = 0; i < width; i++) {
objs[i].~Object();
}
operator delete(objs);
В случае одного объекта:
Object *obj = operator new(sizeof(Object));
// Do smth with obj
obj->~Object();
operator delete(obj);
[/cpde]
Исправление dissident, :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
// Do smth with objs
for (int i = 0; i < width; i++) {
objs[i].~Object();
}
operator delete(objs);
В случае одного объекта:
Object *obj = operator new(sizeof(Object));
// Do smth with objs
obj->~Object();
operator delete(obj);
[/cpde]
Исправление dissident, :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
for (int i = 0; i < width; i++) {
objs[i].~Object();
}
operator delete(objs);
Object *obj = operator new(sizeof(Object));
obj->~Object();
operator delete(objs);
[/cpde]
Исправление dissident, :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
for (Object *obj: objs) {
obj->~Object();
}
operator delete(objs);
Object *obj = operator new(sizeof(Object));
obj->~Object();
operator delete(objs);
[/cpde]
Исправление dissident, :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
for (Object *obj: obj) {
obj->~Object();
}
operator delete(objs);
Object *obj = operator new(sizeof(Object));
obj->~Object();
operator delete(objs);
[/cpde]
Исходная версия dissident, :
Т.е. каждый элемент obj надо уничтожать так:
Поскольку функция «operator delete» не вызывает деструктора, то нету функции «operator delete[]» и в твоем случае, поскольку ты запрашиваешь память для всей таблицы obj одним вызовом функции «operator new», то не надо каждый элемент отдельно удалять функций «operator delete». Так что этот пример:
objs[i]->~Object();
operator delete(objs+i); // тоже что и free()
operator delete(&objs[i]); // или так, что тоже самое
у меня вышел неправильно. Вот более правильные примеры:
Object *objs = operator new(sizeof(Object)*width);
for (Object *obj: obj) {
obj->~Object();
}
operator delete(objs);
Object *obj = operator new(sizeof(Object));
obj->~Object();
operator delete(objs);
[/cpde]