у меня есть что-то вроде
struct functor
{
functor(){}
virtual int operator()()=0;
};
struct impl : public functor
{
int i;
impl(int ii) : i(ii) {}
virtual int operator()(){return i;};
};
void call(functor& f) {std::cout << f() << std::endl;}
class holder
{
public:
holder(){}
std::vector<functor*> dps;
};
class veer
{
public:
std::vector<holder> hs;
std::vector<impl> ds;
veer(){}
void add_h(int i)
{
ds.push_back(impl(i));
holder th;
th.dps.push_back(&ds.back()); //here
hs.push_back(th);
}
};
int main()
{
veer v;
v.add_h(10);
v.add_h(9);
for (auto ih: v.hs)
for (auto ifn : ih.dps)
call(*ifn);
return 0;
}
Этот сегмент неисправен. Мне жаль, что я не могу сделать это проще, это самое простое и наиболее близкое к моему реальному коду, как я мог бы его сделать. Мне нужен вектор указателей на функциональные объекты. Я предполагаю, что в строке с пометкой //here
я отправляю недопустимый указатель, но кроме этого я все еще пытаюсь понять это.
functor
. Если бы вы выполнили полиморфное удаление указателяimpl
через указательfunctor
, это было бы неопределенным поведением. Я не вижу, чтобы вы делали это в этом коде, но об этом нужно знать. - person Fred Larson   schedule 30.05.2014