Korrekter Cast gesucht
-
Will man in einer von CWinApp abgeleiteten Klasse den Namen der INI-Datei oder der Hilfedatei ändern, so wird das wie folgt empfohlen:
free((void*) m_pszProfileName); m_pszProfileName = _tcsdup(_T("D:\\appname.ini"));
Meine Frage an euch: Wie castet man in der free-Anweisung m_pszProfileName mit C++-Casts? m_pszProfileName ist ein LPCTSTR.
-
Du musst nur das const wegcasten.
free(const_cast<LPTSTR>(m_pszProfileName));
-
Danke Dir!
-
Nur eine Randbemerkung: Ich hoffe für dich, daß der übergebene Zeiger auch von malloc() erzeugt wurde - und niemand eine Kopie dieses Zeigers aufgehoben hat.
-
sri hat _tcsdup verwendet, und damit trifft dies wohl zu!
-
m_pszProfileName wird in CWinApp::SetCurrentHandles() mit _tcsdup angelegt und in CWinApp::~CWinApp() mit free freigeben. Sollte also passen.
-
OK, in dem Fall sollte es passen - mir kam es nur verdächtig vor, auf einen unbekannten Zeiger einfach free() loszulassen. Aber wenn das in der MSDN so empfohlen wird, sollte das seine Richtigkeit haben.
-
_tcsdup gehört zur strdup Familie, und für strdup ist AFAIK im C-Standard definiert dass man free zu verwenden hat.
-
hustbaer schrieb:
_tcsdup gehört zur strdup Familie, und für strdup ist AFAIK im C-Standard definiert dass man free zu verwenden hat.
Auch wenn es fast jeder Compiler unterstützt, ist man: strdup() NICHT im Ansi-Standard definiert. Und aus dem oben gegebenen Code-Ausschnitt war nicht ersichtlich, woher der ursprüngliche Wert von m_pszProfileName stammte (free() ist nur definiert, wenn der übergebene Zeiger von der malloc Familie geliefert wurde).
Aber wie gesagt, inzwischen habe ich die MSDN bemüht - und wenn die sagt, daß man diesen Zeiger mit free() freigeben darf/muß, wird das schon stimmen