У меня есть карта любых указателей, называемая gmap, определенная примерно так:
std::map<std::string, boost::any*>& gmap = getSingleton().globalValues;
Эта карта действительно является ссылкой на globalValues, я проверил адреса в gdb.У меня также есть контроль над любыми указателями (именно поэтому они являются указателями, я бы предпочел ссылки, но я сейчас отлаживаю).Теперь, тогда я возвращаю это тем же способом, который я объявляю gmap:
return boost::any_cast<T&>(*gmap[key]);
Просмотр памяти в & boost :: any_cast [T &] [* gmap [key]], данные испорчены, как только я выскочилэтот кадр стека.Что странно, потому что согласно:
документация Boost по any_cast
Возвращает : если передан указатель, он возвращает аналогично уточненный указатель назначение value в случае успеха, в противном случае возвращается значение null.Если T является ValueType, он возвращает копию удерживаемого значения, в противном случае , если T является ссылкой (возможно, с константным значением) на ValueType, он возвращает ссылку на удерживаемое значение.
Так что, насколько я понимаю, это не должно возвращать ссылку на локальную переменную.