2012-12-17 122 views
2

創建這個新對象v是否會產生一個全新的對象或簡單地由*this引用的相同對象空間?此作業是否創建副本?

Vector2 v = *this;

我不會期望它實際上是創建一個新的對象,但我在一個示例應用程序,然後操縱,即使這個代碼是在設置一個類的函數這個新對象看到這個代碼如const。因此我期望這個對象v事實上完全是一個單獨的內存空間,而不是*this

+4

這裏沒有任務。 –

回答

5

這是創建一個新的對象,是的 - 但通過初始化,而不是分配。

可以繞過然而,通過使用參考文獻,Vector2& v = *this;,在這種情況下v*this一個別名(或const Vector& v = *this,如果該方法是const)。

其原因正是您所說的原因 - 因爲發生這種情況的方法是const,因此無法變異*this - 因此您需要非const副本。

+0

@andrewx no。賦值是指定給現有對象的時候:'Vector2 v; v = * this;'而不是'Vector2 v = * this;'。 –

0

是的,v*this的全新對象。

1

假設你是一個Vector2方法中,該運營商=您正在使用被稱爲是有原因的分配副本。現在,它是否執行深層複製,淺拷貝(複製指針,但不是它們指向的對象),或者執行操作符的實際實現。

+0

很好的補充到這個討論,謝謝 – johnbakers