J'ai trouvé quelques problèmes pour std::list
lorsque je fais un développement de l'iPhone sous Xcode. Voici le code:std :: liste problème pour le développement de l'iPhone
///////////// interface //////////////
class CObj
{
public:
int value;
};
typedef std::list<CObj*> ObjList;
@interface testAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ObjList m_objs;
}
//////////// implementation /////////
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
for (int i = 0; i< 10; i++)
{
CObj* obj = new CObj;
obj->value = i;
m_objs.push_back(obj);
}
NSLog(@"%d objects",m_objs.size());
ObjList::iterator it = m_objs.begin();
while (it != m_objs.end())
{
CObj* obj = *it;
if (obj->value == 3)
it = m_objs.erase(it);
else
it++;
}
NSLog(@"%d objects",m_objs.size());
}
L'application se bloque simplement à m_objs.push_back. Mais si je change le std::list
en std::vector
, tout va bien. Une idée? Merci
Que dit le message d'erreur? Y a-t-il une trace de pile? – drewh
En aparté, il y a un autre bug dans le code: vous ne supprimez pas l'objet que vous supprimez de la liste. Vous avez besoin d'un 'delete obj' à côté de l'effacement. –