Как удалить указатель после того, как я использую его для возврата в качестве обычной переменной функцииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как удалить указатель после того, как я использую его для возврата в качестве обычной переменной функции

Сообщение Anonymous »


Я рассматривал подобные вопросы, но все они предполагают, что возвращаемый тип также является указателем. Прошу прощения, если это неправильно сформулировано, поскольку я новичок в C++.

Итак, у меня есть следующая функция:

//Преобразует строку в LPCTSTR для диалогового окна LPCTSTR CAnotherAttemptDlg::convertToLPCTSTR(преобразование std::string) { size_t ConvertChars = 0; const size_t newssizew = преобразование.размер() + 1; wchar_t* wcstring = новый wchar_t[newsizew]; mbstowcs_s(&convertedChars, wcstring, newsizew, конверсия.c_str(), _TRUNCATE); вернуть wcstring; } Я уверен, вы заметили, что в качестве результата я возвращаю указатель, однако вывод не должен быть указателем, поэтому я не могу удалить указатель вне функции, удалив указатель, которому он назначен, поскольку он не выводится в указатель. Как лучше всего это сделать?

Примечание: на случай, если меня спросят, что это должно делать, это преобразование строки в LPCTSTR, что аналогично wchar_t*

Изменить: Для пояснения, это блок, вызывающий эту функцию:
BOOL CAnotherAttemptDlg::OnInitDialog() { строковые настройкиLine; LPCTSTR defStrPath = L""; // = "C:\\Ste\\Runtime\\TestFiles"; LPCTSTR defEndPath = L""; // извлекает начальный и конечный пути по умолчанию из FileTrams.ini, анализирует их на соответствующие переменные ifstream settingsStream("FileTrans.ini"); while (getline(settingsStream, settingsLine)) { разделитель строк = "="; строка tokenOne = settingsLine.substr(0, settingsLine.find(разделитель)); строка tokenTwo = settingsLine.substr(settingsLine.find(разделитель) + 1, '10'); если (tokenOne == "startPath") { defStrPath = ConvertToLPCTSTR (tokenTwo); } иначе, если (tokenOne == "endPath") { defEndPath = ConvertToLPCTSTR (tokenTwo); } } настройкиStream.close(); CDialogEx::OnInitDialog(); SetWindowLong(this->m_hWnd, GWL_STYLE, GetWindowLong(this->m_hWnd, GWL_STYLE) | WS_SYSMENU); // Установите значок для этого диалога. Фреймворк делает это автоматически // когда главное окно приложения не является диалогом SetIcon(m_hIcon, ИСТИНА); // Устанавливаем большую иконку SetIcon(m_hIcon, ЛОЖЬ); // Устанавливаем маленькую иконку // ЗАДАЧА: добавить сюда дополнительную инициализацию SetDlgItemText (IDC_MFCEDITBROWSE1, defStrPath); SetDlgItemText (IDC_MFCEDITBROWSE2, defEndPath); вернуть ИСТИНА; // возвращаем TRUE, если вы не установили фокус на элемент управления удалить [] defStrPath; удалить [] defEndPath; }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»