gpt4 book ai didi

c++ - 重载前缀和后缀运算符时指向类对象的指针

转载 作者:行者123 更新时间:2023-11-27 23:54:31 25 4
gpt4 key购买 nike

我在类中重载了前缀和后缀递增/递减运算符。

#include <iostream>
using namespace std;

class X
{
public:
X() { cout << "X" << endl;}
~X() { cout << "~X" << endl; }

X& operator++() { X *x = new X; return *x; }
X operator++(int) { X *x = new X; return *x; }
X& operator--() { X *x = new X; return *x; }
X operator--(int) { X *x = new X; return *x; }
};

int main()
{
X p;
cout << endl;
++p;
cout << endl;
p++;
cout << endl;
return 0;
}

输出是:

X

X

X
~X

~X

似乎当使用后缀增量时,对象被实例化和删除,但当使用前缀增量时它不会被删除。

这种行为的原因是什么?

最佳答案

您的后缀运算符按值返回,因此您使用 new 创建的对象被复制,并且由于您没有将它绑定(bind)到任何东西,因此拷贝在 main 中的后缀表达式末尾被销毁.通过还让复制构造函数输出一些东西,您可以观察到这种行为,例如参见 here .

另一方面,您的前缀运算符只是返回对您用 new 分配的对象的引用, 所以在 main 中表达式的末尾只是引用被破坏了。

在这两种情况下,您都在泄漏由 new 分配的内存.

关于c++ - 重载前缀和后缀运算符时指向类对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43612511/

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