On 2020-10-21 14:33, Gaier, Bjoern via Boost-users wrote:
Hey everybody,
I looked into the boost intrusive container and played around with it
a bit. I tried the following code:
struct animal : public boost::intrusive::list_base_hook<>
{
std::string name;
int legs;
animal(std::string n, int l) : name{std::move(n)},
legs{l} {}
};
int main(int argc, char **argv)
{
std::vector<animal> test;
boost::intrusive::list<animal> wuff;
for(int n = 0; n < 5; n++)
{
test.push_back(animal("Katze", 4));
}
for(int n = 0; n < 5; n++)
{
wuff.push_back(test[n]);
}
because `test` has 5 elems:
for(int n = 0; n < 15; n++)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
wuff.push_back(test[n]);
}
for(auto elem : wuff)
{
printf("%s\n", elem.name.c_str());
}
}
This code does crash! I guess this is because "test" relocated the
memory and therefor "wuff" lost its references. I would expect the
same result if I would have a std::list with pointers to animal
structures - this is why I wonder what the benefit of an intrusive
container is compared to the same container with just pointers in it.
Hope someone can explain me this! Thank you in advance and kind
greetings
Björn
Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816,
USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr.
Robert Plank, Markus Bode, Heiko Lampert, Takashi Nagano, Junichi
Tajika, Ergin Cansiz.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users