Pages

POD or not POD sujet

mardi 8 avril 2014




Bonjour à tous,

je suis en train de créer un système d'allocation mémoire en définissant mes propres allocators. Sans rentrer dans les détails je créer plusieurs MACRO pour réaliser des allocations et celle qui me fait me poser des questions est ceci :

Code:


1
2
3

#define CL_IS_POD(type) cl::IntToType<cl::IsPOD<type>::m_value>()
#define CL_NEW_ARRAY(type,allocator) cl::NewArray<cl::CArray<type>::m_type>(allocator,cl::CArray<type>::m_count,CL_IS_POD(cl::CArray<type>::m_type))


La macro CL_IS_POD est en fait std::is_pod<T>::value présent dans <type_traits> sous Visual Studio 2010. En fonction de la valeur retourné j'utilise tel ou tel fonction d'allocation.
cl::CArray est un trick template:

Code:


1
2
3
4
5
6
7
8
template<class T>
struct CArray{};
template<class T, size_t N>
struct CArray<T[N]>
{
typedef T m_type;
static const size_t m_count = N;
};


La question est plus "Qu'est ce qu'un POD?" j'ai déjà une réponse mais je m'interroge sur mes connaissances des POD car lorsque je fais ceci :

Code:


1
2
3
4
struct pod
{
float* p;
};


std::is_pod<pod>::value me donne true.
Et avec ceci:

Code:


1
2
3
4
class pod
{
float* p;
};


Or il n'y a ni constructeur, ni destructeur, ni fonction virtuel membre...
Est-ce normal?
J'ai le même résultat avec std::is_pod et std::tr1::is_pod.

Merci




Aucun commentaire:

Enregistrer un commentaire