C++返回对象,这可能吗?

C++ return object, is this possible?

本文关键字:返回 对象 C++      更新时间:2023-10-16
class A{
    int a;
    A (const A& A) {
        this->a = A.a
    } //copy constructor
    A& operator=(const A& test) {
        return *(new A(test));
    } //operator overloading
}; 

这可能吗?

*(new A(test))真的返回对类A实例的引用吗?

可能吗? 是的。 你应该这样做吗? 不。 一,因为它是内存泄漏,因为没有人会根据分配的结果调用delete。 第二,它不是真正的"作业",因为this->a没有被A::operator=()修改。

实现这一点的正确方法更像这样:

class A
{
private:
    int a;
public:
    A(int val = 0)
        : a(val)
    {
    }
    A(const A& A)
        : a(A.a)
    {
    }
    A& operator=(const A& test)
    {
        this->a = test.a;
        return *this;
    }
}; 

当然,对于这样一个简单的例子,你可以完全消除复制构造函数和赋值运算符,让编译器生成的默认实现为你处理复制A::a