gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:23 25 4
gpt4 key购买 nike

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

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

char* m_string;

我目前有一个标准构造函数 (MyString(const char* str)),它接受一个 const char* string,然后通过 m_string 分配必要的内存= new char[numChars + 1](计算参数中的字符数后)

显然,我需要能够使用赋值运算符将一个字符串赋值给另一个字符串,而且还希望能够从另一个字符串对象构造一个字符串对象。即

MyString(const MyString& str)
{
}

关于 overload= 赋值运算符

然后我是否根据字符数获取 rhs 和 lhs 的长度,然后根据 rhs 比 lhs 长还是短来调整内存量?

我不一定想要完整的答案,因为我不相信你仅仅从被告知的答案中学到任何东西,但在正确方向上的一些建议和指导将不胜感激。

谢谢

最佳答案

复制构造函数必须为str 的负载分配内存,然后复制内容。这与您已有的构造函数非常相似,只是 char * 不是直接作为参数给出,而是“隐藏”在 str 中。

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

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

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

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

关于c++ - 为字符串类创建复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com