DF
Size: a a a
DF
АР
АР
АК
SS
АК
AD
АР
АР
AP
rcu<string> x
, обновляемая из разных потоков. Правильное использование переменной:
auto snapshot = x.snapshot();
foo(snapshot->c_str());
const auto* ptr = x.snapshot()->c_str();
foo(ptr);
АК
rcu<string> x
, обновляемая из разных потоков. Правильное использование переменной:
auto snapshot = x.snapshot();
foo(snapshot->c_str());
const auto* ptr = x.snapshot()->c_str();
foo(ptr);
foo(x.snapshot()->c_str())
, что вполне валидно (если предположить, что foo
не сохраняет указатель). string_view(std::string&&)
, где решили разрешить foo(get_string())
как раз для того, чтобы избежать лишней переменнойАК
c_str()
нужно запретить на &&
, ведь мы потенциально можем написать const auto* ptr = get_string().c_str();
АК
DF
rcu<string> x
, обновляемая из разных потоков. Правильное использование переменной:
auto snapshot = x.snapshot();
foo(snapshot->c_str());
const auto* ptr = x.snapshot()->c_str();
foo(ptr);
DF
AP
c_str()
нужно запретить на &&
, ведь мы потенциально можем написать const auto* ptr = get_string().c_str();
unique_ptr::operator->() borrowed
и получать ошибки компиляции при неправильном использованииCD
unique_ptr::operator->() borrowed
и получать ошибки компиляции при неправильном использованииAP
CD