我想把這個方法中的回傳指標(szResult)記憶體自動釋放。這樣做行嗎?如果不是這樣做,應該怎么做?謝謝,,,學習中,。
char* ReadString(char* szSection, char* szKey, const char* szDefaultValue)
{
char* szResult = new char[MAXSTRINGLEN];
std::shared_ptr<char> pResult(szResult);//加入智能指標
memset(szResult, 0x00, MAXSTRINGLEN);
GetPrivateProfileString((LPCTSTR)szSection, (LPCTSTR)szKey,
(LPCTSTR)szDefaultValue, szResult, MAXSTRINGLEN, (LPCTSTR)m_szFileName);
return szResult;
}
uj5u.com熱心網友回復:
TCHAR* ReadString(TCHAR* szSection, TCHAR* szKey, const TCHAR* szDefaultValue)
{
static TCHAR szResult[MAXSTRINGLEN];
memset(szResult, 0x00, MAXSTRINGLEN*sizeof(TCHAR));
GetPrivateProfileString((LPCTSTR)szSection, (LPCTSTR)szKey,(LPCTSTR)szDefaultValue, szResult, MAXSTRINGLEN, (LPCTSTR)m_szFileName);
return szResult;
}
uj5u.com熱心網友回復:
return不也是空了嗎?那你這函式還有啥意義uj5u.com熱心網友回復:
靜態的就自動釋放了?uj5u.com熱心網友回復:
肯定不行吧,szResult是你的回傳值,回傳以后你把指標釋放了,那回傳值還有啥用?我覺著你應該把智能指標放在呼叫這個函式的代碼段里
uj5u.com熱心網友回復:
我看錯了。你用的是靜態陣列,謝謝趙4老師uj5u.com熱心網友回復:
謝謝,各位朋友位uj5u.com熱心網友回復:
問一下。趙4老師,看查了一下。靜態陣列不是函式結束后就自動釋放嗎?這樣,回傳值沒有問題?uj5u.com熱心網友回復:
靜態char[] 生命周期長啊。。這樣使用,單執行緒沒問題,多執行緒。。。就出問題了。
uj5u.com熱心網友回復:
智能指標也不能超過作用域使用, 建議以引數方式傳入, 誰申請誰銷毀LPCTSTR ReadString(LPCTSTR szSection, LPCTSTR szKey, LPCTSTR szDefaultValue, LPTSTR szResult, int iBuffSize)
{
GetPrivateProfileString(szSection, szKey, szDefaultValue, szResult, iBuffSize, m_szFileName);
return szResult;
}
uj5u.com熱心網友回復:
靜態變數生命周期是整個程式的生命周期,所以函式呼叫完后不會被釋放。但是存在多執行緒讀寫時會出錯的問題。
uj5u.com熱心網友回復:
多執行緒版:TCHAR* ReadString(TCHAR* szSection, TCHAR* szKey, const TCHAR* szDefaultValue)
{
static TCHAR szResult[MAX_THREAD_NUM][MAXSTRINGLEN];
int tid;
tid=GetCurrentThreadId()%MAX_THREAD_NUM;
memset(szResult[tid], 0x00, MAXSTRINGLEN*sizeof(TCHAR));
GetPrivateProfileString((LPCTSTR)szSection, (LPCTSTR)szKey,(LPCTSTR)szDefaultValue, szResult[tid], MAXSTRINGLEN, (LPCTSTR)m_szFileName);
return szResult[tid];
}
uj5u.com熱心網友回復:

可以
uj5u.com熱心網友回復:
不是回傳szResult,而是應該pResult,然后賦值給一個智能指標。函式原型要做相應更改uj5u.com熱心網友回復:
智能指標明顯比不上靜態陣列。uj5u.com熱心網友回復:
靜態陣列空間有限吧
uj5u.com熱心網友回復:
智能指標空間也有限。在現實世界中,除時間和空間可能是無限的以外,其它任何事物都是有限的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/59515.html
標籤:基礎類
上一篇:列印機列印多張圖片,圖片大小設定
下一篇:求助:求絕對值最大的演算法
