Wikipedia stany:Czy C++ 0x nadal może jawnie przydzielać operatorowi globalnemu nowy?
typu A może być niemożliwa przeznaczyć z operatora new:
struct NonNewable { void *operator new(std::size_t) = delete; };
Celem tego typu można tylko kiedykolwiek przeznaczono jako obiekt komina lub jako członek innego rodzaj. Nie może on być bezpośrednio przydzielany sterty bez nieprzenośnych sztuczek. (Ponieważ placement new jest jedynym sposobem wywołania konstruktora w pamięci użytkownika przyznane i to stosowanie zostało zabronione, jak wyżej, obiekt może nie być prawidłowo skonstruowana.) Operator
Usuwanie nowy jest podobna do zarówno prywatnych obecne C++, ale nie jest jawnie za pomocą operatora globalnego new, który unika wyszukiwania specyficzne dla klasy, nadal prawidłowe C++ 0x?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
Czy coś przeoczyłem w projekcie?
Żeby było jasne, to jest ważny C++ 03 i works fine:
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;
}
FYI, jeśli sprawdzasz: cytowany tekst został usunięty z artykułu z Wikipedii. –