//non-trivial d-tor
}
};
struct Bar {
std::shared_ptr<Foo> foo;
void erase() { //called from T1
foo = nullptr;
}
void touch() { //called from T2
auto local_copy = foo;
if (local_copy) {
//perform some operations with local_copy
}
}
};
В таком коде, есть ли гарантия, что когда T2 исполняет touch - у нас детерменировано в local_copy будет либо nullptr либо не nullptr и c local_copy можно будет безопасно работать?
Короче на самом деле нет Потокобезопасны только разные объекты шаред_птр в том числе если они указывают на один объект Вызывать copy-ctor у объёта shared_ptr который зануляет другая треда нельзя
Можно ведь, счётчик атомарный ровно для этого и сделан
Обсуждают сегодня