以下是我的字符串緩衝區類的代碼。我在構造函數中初始化了我的_strbuf
指針,其中new char[length]
。現在我想追加它,所以我在第一次調用delete [] _strbuf
之後創建了一個新指針length+1
以避免內存泄漏。然後將其分配給length+1
的新指針。甚至在用新的字符型初始化指針後聲明錯誤
但它給出了_BLOCK_TYPE_IS_VALID
的錯誤。如果我刪除delete[] _strbuf
,它工作正常,但會有內存泄漏。
StringBuffer::StringBuffer() {
_strbuf = 0; // char pointer
_length = 0; // integer
}
StringBuffer::StringBuffer(char* newString, int length) {
_length = length;
//delete[] _strbuf;
_strbuf = new char[length];
_strbuf = newString;
}
StringBuffer::~StringBuffer() {
delete[] _strbuf;
_strbuf=0;
}
這裏是我的附加功能:
void StringBuffer::append(char c) {
_length=_length+1;
char* newbuf = new char[_length];
revSmartCopy(newbuf); // just copying the original string into new string
delete[] _strbuf; //commenting out this line and code run fine but memory leaks
_strbuf=newbuf;
_strbuf[_length]=c;
newbuf = 0;
}
StringBuffer::StringBuffer(const StringBuffer& newString) {
if(newString._strbuf)
{
_strbuf = new char[newString.length()];
_length = newString.length();
strncpy(_strbuf,newString._strbuf,_length);
}
else{
_strbuf = 0;
}
}
StringBuffer& StringBuffer::operator=(const StringBuffer& newString){
if(this == &newString)
return *this;
delete[] _strbuf;
_length = newString._length;
if(newString._strbuf){
_strbuf = new char[_length];
strncpy(_strbuf,newString._strbuf,_length);
}
else{
_strbuf=0;
}
return *this;
}
這是一個問題:'_strbuf = new char [length]; _strbuf = newString;' – blazs
我已經使用了運算符重載。我應該怎麼做才能將該新聞串複製到我的_strbuf – user3585510
您的賦值運算符可能是一個簡單的4行函數,不會調用'new'或'delete'(使用複製/交換)。 – PaulMcKenzie