подобный код:
class Parser
{
public:
wchar_t* getStringData() const;
...
};
std::wstring someMethod() {
Parser p;
...
return p.getStringData();
}
Суть: создаётся локальный объект, вызывается метод, который возвращает указатель на wchar_t на данные внутри этого объекта. Я предполагаю, что у нас из этого wchar_t* будет создан объект std::wstring и всё будет хорошо, т.е. никто не будет пытаться доступиться до дохлого указателя. Я правильно это понимаю или на момент конструирования объекта std::wstring локальный Parser уже уничтожится и конец всему?
возвращаемое значение return будет вычислено до выхода из scope и окончания времени жизни parser
можете запомнить вот так, если поймете std::wstring* someMethodRealForm(char (&buf)[sizeof(std::wstring)] /*буфер для возвращаемого значения*/) { Parser p; ... std::wstring * const __result = new (buf) std::wstring{p.getStringData()}; /* размещаем возвращаемое значение в этом буфере */ return __result; }
Правильно
Обсуждают сегодня