Я заявляю:
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()
, а затем выдает Segmentation Fault. Как итераторы выполняют итерацию в пустом векторе????
Дополнительная информация
Я использую 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
, это один и тот же адрес.