Средства выделения STL и оператор, новый []

Для прибавления к тому, что все остальные сказали, если все столбцы, которые Вы выбираете, включены в индекс, Ваш набор результатов вытянут от индекса вместо того, чтобы искать дополнительные данные из SQL.

5
задан Trott 21 September 2011 в 03:25
поделиться

4 ответа

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).
4
ответ дан 14 December 2019 в 04:39
поделиться

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.

2
ответ дан 14 December 2019 в 04:39
поделиться

std :: vector использует распределитель, который передается как аргумент шаблона, который по умолчанию равен std :: allocate. Распределитель не работает как new [] , хотя - он просто выделяет необработанную память, а размещение new используется для фактического создания объектов в этой памяти, когда вы говорите ему добавить объекты (например, с помощью push_back () или resize () ).

Единственный способ использования new [] в распределителе - если вы немного злоупотребили и выделили необработанное пространство, используя что-то вроде new char [size]; . Что касается злоупотреблений, это довольно безобидно, но все же не связано с вашей перегрузкой new [] для класса.

2
ответ дан 14 December 2019 в 04:39
поделиться

Если вы хотите запретить создание вашего объекта, создайте частный конструктор, а не оператор new .

0
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: