Очень быстрое выделение для объектов в scoped_ptr? - PullRequest
0 голосов
/ 03 апреля 2012

Поскольку scoped_ptr гарантирует, что все объекты в данном потоке размещаются в виде стека, каков наименее болезненный способ указания «пользовательской кучи» для объектов в scoped_ptr?
(например, в течение vector с, deque с, string с и т. д.)

(Это позволило бы нам почти полностью избежать традиционных издержек кучи, получив пул почти такой же быстрый, как стек, но такой же большой, как куча.)

1 Ответ

3 голосов
/ 03 апреля 2012

scoped_ptr и интеллектуальные указатели в целом не влияют на память, выделенную объектами, которые они содержат. Если по какой-то причине у вас есть scoped_ptr<std::vector<T> >, тот факт, что std::vector<T>* хранится в scoped_ptr, совершенно не имеет значения, откуда std::vector<T> получает свою память.

Конечно, тот факт, что std::vector<T> уже является типом RAII (как и все другие классы стандартной библиотеки), который будет очищаться после себя, означает, что вставлять их в scoped_ptr совершенно бессмысленно.

Короче говоря, то, о чем вы говорите, не имеет ничего общего с scoped_ptr. Это связано с allocators , которые вы используете для своих контейнерных классов. Вы лаете не на то дерево.

...