我声明:
typedef std::tr1::shared_ptr<ClassA> SharedPtr;
接着:
std::vector<SharedPtr> mList;
和:
typedef std::vector<SharedPtr>::iterator ListIterator;
的返回mList.size()
是 0,但是当我使用迭代器时,它会遍历为空的向量!这就是我使用迭代器的方式:
for(ListIterator it = mList.begin(); it!=mList.end(); it++)
(*it)->someMethod();
它执行“ someMethod()
”,然后抛出分段错误。迭代器如何在空向量中进行迭代????
更多信息
我正在使用 GTK,所以这就是我传递主要对象的方式:
g_signal_connect(G_OBJECT(widget), "event", G_CALLBACK(&ClassB::fun), this)
是this
ClassB 本身。
然后我像这样收到它:
gboolean ClassB::fun(GtkWidget *widget, GdkEvent *event, ClassB *data)
{
// The mList is here, and is accessed like this:
// data->mList
}
正如我所引用的mList
那样声明了,当我访问其他属性时,假设data->xxx
它可以工作并且很好,问题只发生在mList
这个属性不是动态分配的。
我检查了*data
和的内存地址this
,它们是相同的地址。