Здравствуйте, *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.: Винодельческие провинции — это есть рулез!