Я вижу две проблемы:
Вы используете указатели и новые, как если бы мы были на Java, но это C ++.У вас будут явные утечки памяти, если вы будете использовать C ++ таким образом.
За исключением случаев, когда у вас есть конкретные причины, это должно быть:
std::vector<car> get_car_list() {
std::vector<car> vec;
vec->push_back( car("I'm the 1st"));
vec->push_back( car("I'm the 2nd"));
return vec; }
Но возникает вторая проблема с вашим кодом:
Мне кажется, return_stl_iterator предполагает, что контейнер stl все еще существует, когда вы его используете, и сохраняет итератор в этом контейнере.
После этого вы не сможете вернуть копию контейнера так, как это делаете, потому чтоКонтейнер больше не будет существовать, когда вы захотите использовать итератор.Это как если бы вы использовали ссылку на временный контейнер.
Как видно из этого примера luabind doc , идея с return_stl_iterator состоит в том, чтобы иметь контейнер, который все еще доступен.В этом примере контейнер существует в структуре.Это не временно.
У вас может возникнуть соблазн выделить вектор с новым и вернуть ссылку на этот вектор в вашей функции get_car_list.Но не делайте этого: когда вы освободите свой контейнер?
Если вы хотите вернуть вектор, который не существует где-то еще (временная копия вектора), то вам не следует использовать return_stl_iteratorполитика, кажется, не для этого.