c – 引用vector :: front有效,但vector :: begin则没有
我有这段代码:
cerr << client->inventory.getMisc().front()->getName() << endl; vector<itemPtr>::iterator it; it = client->inventory.getMisc().begin(); cerr << (*it)->getName() << endl; 让我解释一下: client是一个tr1 :: shared_ptr,它指向一个对象,该对象具有名为inventory的成员,该成员具有私有向量< itemPtr>成员可以通过getMisc()访问. itemPtr是tr1 :: shared_ptr< Item>的typedef,getName()返回Item的私有std :: string成员. 从本质上讲,client-> inventory.getMisc()归结为std :: vector,我试图获得第一个元素的迭代器. 问题是第四行是segfaults.显然,迭代器或它指向的shared_ptr都是无效的.我使用第一个cerr语句来测试向量本身是否有效,并且它应该打印,所以我认为它是. 有什么我做错了吗?或者,你们会做什么来调试这个? 解决方法
究竟什么是getMisc的签名?
如果你实际上正在返回一个std :: vector< itemPtr>那么你将返回一份清单.在这种情况下,第一个访问模式将起作用(缓慢),因为临时副本在前端完成执行之前不会被销毁,此时itemPtr本身被复制到临时副本中.第二个失败是因为在使用begin获取迭代器后,临时属于范围并被销毁,而刚刚创建的迭代器会挂起. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |