Решение, которое не было вызвано в других ответах.
Если ваш метод является членом класса, например:
class A {
public:
const char *method();
};
И если экземпляр класса будет жить за пределами полезности указателя, вы можете сделать:
class A {
public:
const char *method() {
string ret = "abc";
cache.push_back(std::move(ret));
return cache.last().c_str();
}
private:
vector<string> cache; //std::deque would be more appropriate but is less known
}
Таким образом, указатели будут действительны до разрушения A
.
Если функция не является частью класса, она все еще может использовать класс для хранения данных (например, переменную static
для функции или экземпляр внешнего класса, на который можно ссылаться по всему миру, или даже член класса static
класса ). Механизмы могут быть сделаны для удаления данных через некоторое время, чтобы не сохранять их навсегда.