2014-08-29 82 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