std :: список проблем для разработки iPhone - PullRequest
0 голосов
/ 10 июня 2009

Я обнаружил некоторые проблемы для std::list, когда я занимаюсь разработкой iPhone под Xcode. Вот код:

///////////// 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 голосов
/ 11 июня 2009

По умолчанию Objective-C не вызывает конструктор для типов c ++ при инициализации.

Если вы установите этот флаг в настройках сборки " Вызов C ++ по умолчанию Ctors / Dtors в Objective-C ", это изменит поведение по умолчанию. Имейте в виду, что флаг отображается только в том случае, если для цели установлено значение Устройство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...