为字符串类创建复制构造函数

时间:2015-07-15 14:13:11

标签: c++ string constructor copy-constructor

我正在创建自己的字符串类(作为练习),我知道我需要一个复制构造函数和一个重载=赋值运算符但不知道从哪里开始。

该类很简单,只存储字符串,例如

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来调整内存量?

我不一定想要整个答案,因为我不相信你从被告知答案中学到了什么,但是在正确方向上的一些建议和指导将会受到赞赏。

由于

1 个答案:

答案 0 :(得分:4)

复制构造函数必须为str的有效负载分配内存,然后复制内容。这非常类似于你已经拥有的构造函数,除了char *不是直接作为参数给出,而是&#34;隐藏&#34;在str

赋值运算符必须考虑已分配的内存。

  • 它可以重用现有的已分配内存。如果新内容具有相同的长度或更短,则此方法有效。终止\0将使末尾的附加内存对常规字符串处理函数不可见。

  • 如果新字符串较大,则必须释放旧内存并分配足够大小的新块。

  • 为安全起见,建议检查自我分配,即this == &rhs。如果删除内存然后尝试从中读取内存,则会出现问题。这允许a = a起作用。
  • 返回对修改对象的引用也是常见做法。 这允许a = b = c起作用。