LINUX.ORG.RU

История изменений

Исправление 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]