2014-08-29 44 views
0
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 
}; 

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

是否*(new A(test))真的返回一个类的参考A实例?

+5

是的,这是良好的形式,并产生一个'A'类型的左值,但为什么你会在一个赋值操作符中做到这一点? – Brian 2014-08-29 03:17:59

回答

1

这可能吗?是。你应该这样做吗?第一,因为它是内存泄漏,因为任何人都不会在赋值结果上调用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