std::allocate_shared, разрешить выделение счетчика ссылок общего указателя из пользовательского распределителя и в одном выделении

Сделать общий доступ повышает производительность, используя одно выделение для счетчика ссылок и объекта, возможно ли использовать настраиваемый распределитель вместе с std::allocate_shared и по-прежнему иметь одно выделение, согласно тестовому коду, который я написал, это не происходит: пример

Я знаю о boost::intrusive, но он требует написания дополнительного кода, который может пойти не так.


person Ayub    schedule 06.04.2018    source источник
comment
на самом деле это работает в соответствии с моими требованиями, для каждого объекта, созданного с использованием std::alloc_shared и с помощью специального распределителя, выполняется только одно выделение. Итак, у меня есть ответ на мой вопрос   -  person Ayub    schedule 06.04.2018
comment
Тогда, пожалуйста, ответьте на свой вопрос ниже, чтобы он был помечен как отвеченный и потенциально мог помочь кому-то в будущем.   -  person rak007    schedule 06.04.2018


Ответы (1)


с помощью некоторой отладки выяснилось, что std::allocate_shared делает то, что ожидается, он позволяет вам сделать только одно выделение как для вашего объекта, так и для счетчика ссылок.

ниже исправлен код: распределить общий

Здесь оператор new вызывается ровно один раз как для std::make_shared, так и для std::allocate_shared. С помощью этого пула объектов можно создать такую ​​же эффективность, которую можно ожидать от boost::intrusive_ptr, для которого требуется дополнительное кодирование.

person Ayub    schedule 06.04.2018