Сохраняет ли boost::any копию или ссылку / указатель?
Следующий код безопасен?
boost::any any_value;
{
std::string s = "HelloWorld";
any_value = s;
}
std::string ss = any_cast<std::string>(any_value);
2 ответа
Решение
Из Boost.Any документы:
template<typename ValueType> any & operator=(const ValueType & rhs);
Делает копию rhs, отбрасывая предыдущее содержимое, так что новое содержимое по типу и значению эквивалентно rhs.
Так что да, это безопасно. Копия строки сохраняется, а не ссылка на нее.
Да, это. boost::any
берет все, делая копию этого, предполагая, что тип выполняет Copyable
концепция.