用于iPhone开发的std :: list问题

时间:2009-06-10 05:42:54

标签: iphone stl

当我在Xcode下进行一些iPhone开发时,我发现了std::list的一些问题。这是代码:

///////////// 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() );
}

应用程序只是在m_objs.push_back崩溃。但如果我将std::list更改为std::vector,一切都很好。任何的想法?感谢

1 个答案:

答案 0 :(得分:0)

默认情况下,Objective-C不会在初始化时调用c ++类型的构造函数。

如果您在构建设置“在Objective-C中调用C ++默认Ctors / Dtors ”中设置此标志,它将更改默认行为。请注意,如果您将目标设置为设备,则仅显示该标志。