2010-02-17 5 views
1

Ce n'est pas exactement mon code mais il ressemble beaucoupComment faire pour sortir un pointeur

J'ai 2 tables de type CTable. Ils fonctionnent de la même manière que les tableaux normaux mais peuvent être alloués dynamiquement et redimensionnés. Alors que font semblant lets qu'ils sont des tableaux en ce moment

Une table a des références d'objets

MyObj obj1; 
MyObj obj2; 

MyObj table1[10]; 
table1[0] = obj1; 
table1[1] = obj2; 

maintenant parce que je veux les commander différemment parfois, je l'ai mis des pointeurs à ces objets dans une autre table

MyObj *table2[10]; 
table2[0] = &table1[0]; 
table2[1] = &table1[1]; 

est-il un moyen d'obtenir une référence à obj1 et obj2 par table2 afin que ceux objet se sortir du champ à la fin d'une sorte de fonction de suppression

quelque chose comme

void free() { 
MyObj &obj = *table2[0]; 
} 

puis bang, à la fin de libre, obj est supprimer automatiquement. En outre, une certaine façon de supprimer ces objets via table2 serait acceptable.

+1

Que devrait-il se passer exactement là-bas? L'objet doit-il être retiré des tables ou quoi? – sth

+0

Avez-vous besoin de l'implémentation de scopeguard (http://www.drdobbs.com/cpp/184403758)? Comment invoqueriez-vous la fonction de suppression? – Andy

Répondre

0

Dans votre cas, il est bon d'être un vecteur avec seulement des pointeurs.

Si elle ne correspond pas essayer:

for(UINT i=0;i<vect1.size();++i) 
{ 
    MyObj * p = &vect1[i]; 
    vect2.push_back(p); 
} 

// Ceci est par exemple d'ajouter

post-scriptum

vector<MyObj*> vect2; 
vect2.push_back(&obj1); 
vect2.push_back(&obj2); 

ce code est erroné

+0

oui vous avez raison mon exemple n'est pas bon – Eric

1

Si vous souhaitez contrôler la durée de vie des objets, vous aurez besoin de les allouer dynamiquement. Dans ce cas, votre code ressemblerait à ceci:

vect2.push_back(new MyObj); 
vect2.push_back(new MyObj); 

void func() { 
    MyObj &obj = *vect2[0]; 
    // ... 
    vect2.erase(vect2.begin()); 
    delete &obj; 
} 
Questions connexes