gpt4 book ai didi

C++ 重载运算符 +

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:03 25 4
gpt4 key购买 nike

我正在尝试为我的类重载运算符 +,如下所示:

MyClass MyClass::operator +(const MyClass& rval) const {
MyClass ret(m_src); // m_src is member of MyClass: char* m_src;
ret.Add(rval); // this->m_src + rval, this method work correctly
return ret; // so, in ret.m_src I have correct value
} // but after this C++ call destructor for ret

析构函数:

delete[] m_src; // because in some methods I allocate dynamic memory

因此,析构函数清除内存,函数返回垃圾。我怎样才能避免这种情况?如果我删除析构函数,函数工作正常,但在这种情况下我有内存泄漏:(

P.S:不幸的是,我无法更改重载 + 的原型(prototype)。谢谢。

最佳答案

您可以通过替换来避免这种情况:

char *m_src; 

通过:

std::string m_src;

在你的类(class)MyClass .

char *作为类(class)成员,你得到的东西很容易搞砸手动内存管理,你只需用 std::string 的基于隐式 RAII 的内存管理替换它。并为自己省去所有这些麻烦。这就是std::string存在的意义在 C++ 中。


如果不能使用标准库std::string类(虽然我根本不明白为什么),您需要确保您遵循 Rule of Three .

关于C++ 重载运算符 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670548/

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