以下是我的字符串缓冲区类的代码。我在构造函数中初始化了我的_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