Size: a a a

2020 August 03

I

Ioann_V in pro.cxx
Александр Караев
а в чем проблема сделать allocate внутри конструктора и пометить конструктор аллокатора как noexcept(noexcept(allocate()))?
а если речь о std::Allocator? Писать враппер поверх враппера?
источник

DC

Denis Chernikov in pro.cxx
Александр Караев
а в чем проблема сделать allocate внутри конструктора и пометить конструктор аллокатора как noexcept(noexcept(allocate()))?
А разве вектор не рассчитывает на тот факт, что в случае вызова конструктора умолчания никакой памяти не выделится (и аллокатор ничего не должен делать)?
источник

АК

Александр Караев... in pro.cxx
Ioann_V
а если речь о std::Allocator? Писать враппер поверх враппера?
а как ты планируешь заставить std::allocator выделять память заранее, без его переписывания?
источник

I

Ioann_V in pro.cxx
Александр Караев
а в чем проблема сделать allocate внутри конструктора и пометить конструктор аллокатора как noexcept(noexcept(allocate()))?
CppRef, говорит о том, что внутри noexcept мы должны проверять не allocate функцию, а конструктор по умолчанию.
источник

DC

Denis Chernikov in pro.cxx
Ioann_V
CppRef, говорит о том, что внутри noexcept мы должны проверять не allocate функцию, а конструктор по умолчанию.
Александр говорит про спецификацию noexcept конструктора аллокатора, а не вектора
источник

I

Ioann_V in pro.cxx
Denis Chernikov
Александр говорит про спецификацию noexcept конструктора аллокатора, а не вектора
Это я тоже понял, и предложил написать Враппер для std allocator.
источник

I

Ioann_V in pro.cxx
Александр Караев
а как ты планируешь заставить std::allocator выделять память заранее, без его переписывания?
А зачем заставлять это делать аллокатор, это вектор будет внутри себя делать же.
источник

АК

Александр Караев... in pro.cxx
Denis Chernikov
А разве вектор не рассчитывает на тот факт, что в случае вызова конструктора умолчания никакой памяти не выделится (и аллокатор ничего не должен делать)?
на этот вопрос ответ не знаю
источник

DS

Dmitry Sokolov in pro.cxx
Ioann_V
А я не про это. Я про проверку размера, который надо задать. end - begin x 2, или start_size or end - begin x 2
А стратегия роста контейнера это вообще implementation-defined. Вообще есть мнение что x2 как раз плохой вариант, т.к. в случае непрерывного роста освобождённые ранее блоки в сумме не дадут нужный размер и иногда для этого используется золотое сечение.
источник

АК

Александр Караев... in pro.cxx
Ioann_V
А зачем заставлять это делать аллокатор, это вектор будет внутри себя делать же.
изначально вопрос был поставлен так: "я хочу подменить аллокатор, чтобы он заранее выделял чуток памяти" (если я правильно понял), а теперь "я хочу, чтобы стандартный вектор+аллокатор выделяли заранее память" - этого не добиться без модификации стандартной библиотеки
источник

I

Ioann_V in pro.cxx
Dmitry Sokolov
А стратегия роста контейнера это вообще implementation-defined. Вообще есть мнение что x2 как раз плохой вариант, т.к. в случае непрерывного роста освобождённые ранее блоки в сумме не дадут нужный размер и иногда для этого используется золотое сечение.
Так, не спорю. Но в gcc, именно что 2.Там так написано: newSize = max(1, size * 2);
источник

I

Ioann_V in pro.cxx
так вот, заранее выделив память, мы могли бы написать просто
источник

I

Ioann_V in pro.cxx
size = size x 2
источник

АК

Александр Караев... in pro.cxx
и сделав аллокацию на пустом месте?)
источник

I

Ioann_V in pro.cxx
Александр Караев
изначально вопрос был поставлен так: "я хочу подменить аллокатор, чтобы он заранее выделял чуток памяти" (если я правильно понял), а теперь "я хочу, чтобы стандартный вектор+аллокатор выделяли заранее память" - этого не добиться без модификации стандартной библиотеки
Нет, вопрос звучит так: почему мы в конструкторе вектора, специфика тор noexcept, вычитываем от того же специфика тора в Дефолтном конструкторе Аллокатора, а не от функции allocate или типа того?
источник

I

Ioann_V in pro.cxx
Александр Караев
и сделав аллокацию на пустом месте?)
Почему на пустом? Тут size, это капасити им в виду. И
источник

АК

Александр Караев... in pro.cxx
Ioann_V
Нет, вопрос звучит так: почему мы в конструкторе вектора, специфика тор noexcept, вычитываем от того же специфика тора в Дефолтном конструкторе Аллокатора, а не от функции allocate или типа того?
потому что дефолт конструктор вектора зовёт дефолт конструктор аллокатора, причем тут allocate?
источник

I

Ioann_V in pro.cxx
Александр Караев
потому что дефолт конструктор вектора зовёт дефолт конструктор аллокатора, причем тут allocate?
Ну, то есть, выходит, если я хочу сделать свой вектор stl, я не имею право выделять в конструкторе умолчательном память!?
источник

DF

Dollar Føølish in pro.cxx
Можно конструктор пометить ноексепт фолс)
источник

DF

Dollar Føølish in pro.cxx
И проблема решена
источник