2012-12-05 1 views
0

Pour mon projet, je travaille avec des classes anonymes en C++ et je me demandais où elles étaient allouées en mémoire.Classes anonymes en C++

Je suis assez sûr que ce sera alloué sur le tas, mais je voudrais savoir si quelqu'un d'autre a des informations plus détaillées.

+0

comment pouvez-vous attribuer une classe sans nom sur le tas? – neagoegab

+7

** classes ** ne se trouvent nulle part –

+0

bien sûr, l'objet de type anonyme et les variables déclarées à l'intérieur! –

Répondre

2

Comme il est indiqué, les classes ne sont pas tout emplacement. objets, qui sont des instances d'une classe anonyme peuvent être attribuées de plusieurs façons:

Par exemple, comme sous-objets d'un autre objet:

struct S 
{ 
    struct { 
    int x, y; 
    } p; 
}; 

ou conjointement avec la définition de classe

struct 
{ 
    float x, y; 
} p; 

ou en utilisant decltype:

struct S 
{ 
    struct { 
    int x, y; 
    } p; 
}; 

void g (decltype (S::p)) {} 

decltype (S::p) *f() 
{ 
    auto p = new decltype (S::p); 
    g(*p); 
    return p; 
} 
1

Si la classe anonyme fait partie d'une autre classe ou structure, elle sera allouée avec la classe ou la structure qui l'entoure, que ce soit sur le tas ou sur la pile.

Si la classe anonyme est une variable globale, elle est stockée avec d'autres variables globales.

Si la classe anonyme est une variable locale, il est stocké sur la pile en même temps que les autres variables locales de la fonction qu'il est défini dans.

+1

En bref: le même endroit que l'objet si sa classe avait un nom. –