У меня есть список, в котором хранятся объекты.Указатель на элемент списка после удаления
list<MyObject> l;
У меня также есть метод, который возвращает указатель на один из этих объектов, если она существует, или nullptr иначе.
MyObject* get(int x) {
for (std::list<MyObject>::iterator it = l.begin(); it != l.end(); ++it) {
if (it->X == x) {
return &(*it);
}
}
return nullptr;
}
Если я получаю() указатель на элемент, и в то время как я использую его, он получает стерта из другого потока, указатель становится недействительным, и странные вещи случаются :)
То, что я хотел знать, есть ли способ вернуть какой-либо особый вид указателя в get(), так что, если я вызываю стирание на элементе и этот элемент все еще ссылается, его память не будет выпущена до тех пор, пока указатель на нее не будет вне сферы действия.
Я рассмотрел использование ссылки, но мне нужна возможность возврата nullptr на get, поэтому я могу проверить у вызывающего, если возврат действительно был действительным объектом.
Может ли кто-нибудь предложить лучший способ сделать это, чтобы избежать этих проблем с памятью?
Список 'shared_ptr' будет лучше для ваших нужд. –