我遇到了一個奇怪的問題,對我沒有任何意義。保持對象存活的問題
我有一個結構(包含字符串)上限定爲API如下:
typedef struct sNCharcb
{
char * pData;
int iDataLen;
}
tsNCharcb;
我需要保存這個結構的深層副本。我已經創建了一個實用的功能,使這個結構的副本:
inline sNCharcb rapi_strcpy(const sNCharcb &rapistr)
{
sNCharcb res;
res.pData = new char[rapistr.iDataLen];
strcpy(res.pData, rapistr.pData);
res.iDataLen = rapistr.iDataLen;
return res;
}
我創建一個使用這個工具方法這些「sNCharcb」結構的副本,並將它們保存到引用父對象變量:
stored_sNCharcb = rapi_strcpy(sNCharcb_to_copy);
經過一段時間後,這些存儲值被神奇地更改爲包含一些隨機垃圾。存儲這些值的父對象始終處於作用域內,並且不會被破壞。什麼可能導致這些值過早被抹去?
是否有一個理由,爲什麼你不'的std :: string'呢? – 2013-02-13 20:40:07
您應該爲此類實現有意義的拷貝構造函數,賦值運算符和析構函數。或者將問題標記爲C.或者只是使用'std :: string'數據成員而不是'char *',所有問題都會消失。 – juanchopanza 2013-02-13 20:43:26
這是我無法更改的API。無論我喜不喜歡,我都必須玩C字符串。 – 2013-02-14 05:54:54