Проблема pybind11 bad_alloc с std::vector‹std::shared_ptr‹A››

У меня есть такие структуры:

struct A{
  void do_stuff(){...does stuff};
}
struct B{
  std::vector<std::shared_ptr<A>> objs;
}

мой пибинд:

py::class_<A>(m, "A")
  .def("do_stuff", &A::do_stuff)
py::class_<B>(m, "B")
  .def_readwrite("objs", &B::objs);

Поведение, которого я пытаюсь достичь:

import mybind

b_instance = mybind.B()

for a_instance in b_instance:
  a_instance.do_stuff()

К сожалению, я получаю

Ошибка памяти: std::bad_alloc

Пожалуйста, помогите мне. Код выше на самом деле не тот код, с которым я работаю. Класс A работает сам по себе, но не работает при переборе B. Если этого кода недостаточно, напишите в комментариях. Спасибо!


person Николай Вуколов    schedule 30.11.2018    source источник


Ответы (1)


Я узнал, что пошло не так. Это сложнее, чем я написал, потому что я использую перегрузку и вызываю виртуальный метод из родительского класса, который вызывает дочерний виртуальный метод - pybind11 не может справиться с этим поведением. У меня это исправлено. Если у вас есть ошибки вокруг PYBIND11_OVERLOAD со сложной структурой классов - напишите комментарий или напишите мне - я думаю, что могу помочь

person Николай Вуколов    schedule 01.12.2018