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