Я заявляю:
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
они имеют одинаковый адрес.