当我在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”(right)对象。(1) ~ a-b
(2) ~ b
(3) ~ a-b
(4) ~ b
(5) ~ a
有人知道如何一次性销毁多个对象吗?
最终,我希望得到以下输出:
(3) ~ a-b
(4) ~ b
(5) ~ a
谢谢!
const&
参数来避免复制b
对象(在任何大于几个字的结构体上,你都应该这样做)。一旦打开优化,a-b
的复制可能会被省略,虽然我认为没有保证这种方法。 - Silvio Mayolo~
和一些文本之外,还要打印出this
的值。你会发现被销毁的对象不是你明确创建的对象。 - PaulMcKenzieTest D3 = D1 + D2;
以给予复制省略的机会。通过这些更改,您将获得期望的结果。 - Igor Tandetnik