Для прибавления к тому, что все остальные сказали, если все столбцы, которые Вы выбираете, включены в индекс, Ваш набор результатов вытянут от индекса вместо того, чтобы искать дополнительные данные из SQL.
C++ Standard, section 20.4.1.1. The default allocator allocate() function uses global operator new:
pointer allocate(size_type n, allocator<void>::const_pointerhint=0);
3 Notes: Uses ::operator new(size_t) (18.4.1).
std library implementations won't use T::operator new[] for std::allocator. Most of them use their own memory pooling infrastructure behind the scenes.
In general, if you want to stop Foo
objects being dynamically allocated, you'll have to have make all the constructors private and provide a function that creates Foo
objects. Of course, you won't be able to create them as auto
variables either though.
std :: vector использует распределитель, который передается как аргумент шаблона, который по умолчанию равен std :: allocate. Распределитель не работает как new []
, хотя - он просто выделяет необработанную память, а размещение new
используется для фактического создания объектов в этой памяти, когда вы говорите ему добавить объекты (например, с помощью push_back ()
или resize ()
).
Единственный способ использования new []
в распределителе - если вы немного злоупотребили и выделили необработанное пространство, используя что-то вроде new char [size];
. Что касается злоупотреблений, это довольно безобидно, но все же не связано с вашей перегрузкой new []
для класса.
Если вы хотите запретить создание вашего объекта, создайте частный конструктор, а не оператор new
.