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