当我在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
,一切都很好。任何的想法?感谢
答案 0 :(得分:0)
默认情况下,Objective-C不会在初始化时调用c ++类型的构造函数。
如果您在构建设置“在Objective-C中调用C ++默认Ctors / Dtors ”中设置此标志,它将更改默认行为。请注意,如果您将目标设置为设备,则仅显示该标志。