![](/img/trans.png)
[英]How to initialize const / non-const static reference member?
[英]How to initialize non-const member variables with const actual parameter?
當我使用參數的給定數據類型初始化構造函數時,我發現“無法將 const char* 值分配給 char* 實體”的解釋出錯了。
class TString
{
private:
char* m_pData;
int m_nLength;
public:
TString();
TString(const char* pStr);
······
}
TString::TString(const char* pStr) {
this->m_pData = pStr;
}
我應該怎么做才能解決這個問題? 如果可能的話,給我一個正確的例子。 在此先感謝並為我的無知道歉。
const char * 通常是預定義的 static 編譯字符串,不能更改,因為它們被鎖定在源代碼中,或者它們來自一些不可變的源。 這部分是為什么將它們標記為 const 以防止人們試圖更改它們的原因。
解決這個問題最簡單的方法是把 const char * 復制到堆上,然后它就不再是常量了。
例如:
#include <string.h> // for strdup
...
TString::TString(const char* pStr) {
m_pData = strdup(pStr); // this will malloc and copy the string accepting const char * as input.
}
您需要考慮的一件事是,m_pData 現在在堆上,因此在析構函數中,您需要釋放此數據,否則將出現 memory 泄漏。
TString::~TString(){
free(m_pData);
}
您還需要在 TString() 構造函數中也設置 m_pData=NULL。
這將適用於字符串,但如果它是二進制數據,即沒有終止符,則使用 malloc 分配數據並使用 memcpy,例如:
m_pData=(char *)malloc(m_nlength*sizeof(char));
memcpy(m_pData,pStr,m_nlength);
或者一些這樣的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.