gpt4 book ai didi

c++ - C++ 中的运算符重载(复制构造函数和析构函数)

转载 作者:行者123 更新时间:2023-12-05 05:49:41 25 4
gpt4 key购买 nike

当我在 C++ 中运行以下代码时:

#include <iostream>

using namespace std;

class Test
{
public:
string name;
Test();
Test(string pname);
~Test();
Test operator+(Test right);
};

Test Test::operator+(Test right)
{
Test neo_name;
neo_name.name = name + "-" + right.name;
return neo_name;
}

Test::Test()
{

}

Test::Test(string pname)
{
name = pname;
}

Test::~Test()
{
cout << "~ " << name << endl;
}

int main()
{
Test D1("a");
Test D2("b");

Test D3;
D3 = D1 + D2;

return 0;
}

我注意到 + 运算符重载方法破坏了“a-b”(neo_name)和“b”(右)对象。

(1) ~ a-b
(2) ~ b
(3) ~ a-b
(4) ~ b
(5) ~ a

有谁知道如何销毁每个对象一次?

最后,我希望输出如下:

(3) ~ a-b
(4) ~ b
(5) ~ a

谢谢!

最佳答案

您有几个地方可以清理。

更改为:

    Test operator+(const Test & right);

您当前的实现需要一个不必要的拷贝。

接下来,当调用您的 operator+ 方法时:

Test D3 = D1 + D2;

有一个基本规则,您几乎应该在实例化时进行初始化。想想必须要发生的事情。

如果你这样做:

Test D3;
D3 = D1 + D2;

然后您将构建一个默认的 D3,然后在下一行调用您的 operator+,然后复制 D3。但是,如果您在一行中完成所有操作,编译器会更智能,实际上更智能。

尝试这些改变,看看您是否更快乐。

关于c++ - C++ 中的运算符重载(复制构造函数和析构函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70637452/

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