我正在学校学习 C++ 并为作业创建一个字符串类。我有一些问题:
首先,以下是否会造成内存泄漏?
MyString operator() (int sliceStart, int sliceEnd) {
sliceStart = sliceStart%_len;
if(sliceStart < 0)
sliceStart = _len + sliceStart;
sliceEnd = sliceEnd%_len;
if(sliceEnd < 0)
sliceEnd = _len + sliceEnd;
char* temp = new char[_len + 1];
if(sliceStart == sliceEnd)
return *this;
int i;
if(sliceStart < sliceEnd)
for(i = 0; sliceStart < sliceEnd; ++sliceStart && ++i)
temp[i] = _str[sliceStart];
else if(sliceStart > sliceEnd) {
for(i = 0; sliceStart < _len; ++sliceStart && ++i)
temp[i] = _str[sliceStart];
for(int k = 0; k < sliceEnd; ++i && ++k)
temp[i] = _str[k];
}
temp[i] = '\0';
//delete [] temp
return MyString(temp);
}
如果是这样,添加注释的删除行是否会返回一个有效值,因为它在返回之前被释放。还是有可能内存可能会在两条线之间被抢走?
(我知道在这种特殊情况下,我可以简单地在返回之前创建一个 MyString 对象,但我很好奇,好像我必须返回 temp char)
管理您还希望按值返回的动态本地内存的常用/正确方法是什么?