Википедия сообщает:
Невозможно выделить тип с помощью оператора new:
struct NonNewable {
void *operator new(std::size_t) = delete;
};
Объект этого типа может быть только когда-либобыть выделенным как объект стека или как член другого типа.Он не может быть непосредственно размещен в куче без непереносимого обмана.(Поскольку размещение new - единственный способ вызвать конструктор в выделенной пользователем памяти, и это использование было запрещено, как указано выше, объект не может быть правильно сконструирован.)
Удаление оператора new аналогично созданиюон частный в текущем C ++, но явно не использует глобальный оператор new, который избегает поиска по классам, все еще действительный C ++ 0x?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
Я что-то пропустил в черновике?
Для ясности, это действительно C ++ 03 и отлично работает :
struct NonNewable {
private:
void *operator new(std::size_t); // not defined
};
int main() {
// ignore the leaks, it's just an example
void *mem = operator new(sizeof(NonNewable));
NonNewable *p = ::new(mem) NonNewable();
p = ::new NonNewable();
return 0;
}