我正在创建自己的字符串类(作为练习),我知道我需要一个复制构造函数和一个重载=赋值运算符但不知道从哪里开始。
该类很简单,只存储字符串,例如
char* m_string;
我目前有一个标准构造函数(MyString(const char* str)
),它接受const char* string
,然后通过m_string = new char[numChars + 1]
分配必要的内存(在计算参数中的字符数后)< / p>
显然,我需要能够使用赋值运算符将一个字符串分配给另一个字符串,但也希望能够从另一个字符串构造字符串对象。即。
MyString(const MyString& str)
{
}
关于overload =赋值运算符
然后我根据字符数得到rhs和lhs的长度,然后根据rhs是长还是短于lhs来调整内存量?
我不一定想要整个答案,因为我不相信你从被告知答案中学到了什么,但是在正确方向上的一些建议和指导将会受到赞赏。
由于
答案 0 :(得分:4)
复制构造函数必须为str
的有效负载分配内存,然后复制内容。这非常类似于你已经拥有的构造函数,除了char *
不是直接作为参数给出,而是&#34;隐藏&#34;在str
。
赋值运算符必须考虑已分配的内存。
它可以重用现有的已分配内存。如果新内容具有相同的长度或更短,则此方法有效。终止\0
将使末尾的附加内存对常规字符串处理函数不可见。
如果新字符串较大,则必须释放旧内存并分配足够大小的新块。
this == &rhs
。如果删除内存然后尝试从中读取内存,则会出现问题。这允许a = a
起作用。a = b = c
起作用。