Является ли boost::multiprecision::cpp_int POD?

Я собираюсь использовать классы с boost::multiprecision::cpp_int (см. Boost Multiprecision) в качестве членов данных, и я надеюсь управлять экземплярами этих классов в куче с помощью boost::fast_pool_allocator Увеличить пользовательский распределитель.

Чтобы это было безопасно, мне нужно знать, что boost::multiprecision::cpp_int — это POD (или, по крайней мере, что он не выделяет память в куче, т. е. полностью основан на стеке).

Является ли boost::multiprecision::cpp_int устройством POD?

Спасибо!


person Dan Nissenbaum    schedule 08.04.2014    source источник
comment
Подумайте об этом на мгновение, куда это может распространяться, когда оно растет? Кроме того, что может быть определяет количество битов для хранения непосредственно в объекте, прежде чем прибегать к динамическому распределению памяти в документации, которую вы связали?   -  person PlasmaHH    schedule 09.04.2014
comment
Да, теперь это очевидный момент для меня, спасибо.   -  person Dan Nissenbaum    schedule 09.04.2014


Ответы (2)


Почему бы не написать небольшую программу, чтобы выяснить это?

#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.

person bstamour    schedule 08.04.2014
comment
Существует ли класс признаков типа, который будет указывать, выделяется ли он в куче? Я думаю, что мое ограничение POD может быть слишком строгим. Мне просто нужно знать, что он полностью основан на стеке. - person Dan Nissenbaum; 08.04.2014
comment
Вот список свойств типов, включенных в C++: en.cppreference.com/w /cpp/header/type_traits - person bstamour; 08.04.2014

Ответ, взятый из комментария @PlasmaHH и вполне очевидный в ретроспективе, заключается в том, что нет, boost::multiprecision::cpp_int не является POD.

Цитата из PlasmaHH:

Подумайте об этом на мгновение, куда это может распространяться, когда оно растет? Кроме того, что может означать «Определяет количество битов для хранения непосредственно внутри объекта, прежде чем прибегать к динамическому распределению памяти» в документации, которую вы связали?

person Dan Nissenbaum    schedule 11.04.2014