Re[3]: Насильный вызов конструктора
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.11.02 01:57
Оценка:
Здравствуйте, *this, Вы писали:

{ избыточное цитирование удалено модератором -- ПК }

*>n = new(&Pool) node; — все работает
*>delete (n, &Pool): — вызывает стандартный delete из CRT !!!

*>В ЧЕМ МОЖЕТ БЫТЬ ПРОБЛЕМА????

placement delete вызывается только при исключении, выброшенном при выполнении placement new (во всяком случае, стандарт говорит о таком применении). Непосредственно вызвать placement delete нельзя, хотя определить можно. Соответственно, синтаксиса для placement delete — нету.

В данном случае delete (n, &Pool) фактически пытается удалить Pool, трактуя (n,&Pool) как выражение, значением которого является вполне законный аргумент оператора delete, т.е., &Pool.

На самом деле, тебе нужно определить ещё один оператор delete в структуре node:

struct node {
...
void operator delete(void *ptr)
{
  // здесь нужно найти тот Pool, который содержит ptr и ему уже передать ptr для обработки
}
...
};

// Собственно, использование:

n = new(&Pool) node;
delete n; // Здесь вызовется node::delete
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.