Я собираюсь использовать классы, которые имеют boost::multiprecision::cpp_int
(см. Повышение Multiprecision) как члены данных, и я надеюсь управлять экземплярами этих классов в куче, используя boost::fast_pool_allocator
Увеличить пользовательский распределитель.
Для того, чтобы это было безопасно, мне нужно знать, что boost::multiprecision::cpp_int
является POD (или, по крайней мере, он не выделяется в куче, т. е. является чисто стековым).
Является boost::multiprecision::cpp_int
ПОД?
Спасибо!
Почему бы не написать небольшую программу, чтобы узнать?
#include <iostream>
#include <type_traits>
#include <boost/multiprecision/cpp_int.hpp>
int main()
{
std::cout << std::is_pod<boost::multiprecision::cpp_int>::value << std::endl;
}
На моей платформе (gcc версии 4.8.2) вывод равен 0, то есть тип не является типом POD.
Ответ, взятый из комментария @ PlasmaHH и довольно очевидный в ретроспективе, заключается в том, что нет, boost::multiprecision::cpp_int
это не POD.
Цитировать из PlasmaHH:
Подумайте об этом на мгновение, где это может распространиться, когда
оно растет? Также что может быть «Определяет количество битов для
хранить непосредственно внутри объекта, прежде чем прибегать к динамической памяти
Выделение «в документации вы связали, значит?