創建這個新對象v
是否會產生一個全新的對象或簡單地由*this
引用的相同對象空間?此作業是否創建副本?
Vector2 v = *this;
我不會期望它實際上是創建一個新的對象,但我在一個示例應用程序,然後操縱,即使這個代碼是在設置一個類的函數這個新對象看到這個代碼如const
。因此我期望這個對象v
事實上完全是一個單獨的內存空間,而不是*this
。
創建這個新對象v
是否會產生一個全新的對象或簡單地由*this
引用的相同對象空間?此作業是否創建副本?
Vector2 v = *this;
我不會期望它實際上是創建一個新的對象,但我在一個示例應用程序,然後操縱,即使這個代碼是在設置一個類的函數這個新對象看到這個代碼如const
。因此我期望這個對象v
事實上完全是一個單獨的內存空間,而不是*this
。
這是創建一個新的對象,是的 - 但通過初始化,而不是分配。
可以繞過然而,通過使用參考文獻,Vector2& v = *this;
,在這種情況下v
爲*this
一個別名(或const Vector& v = *this
,如果該方法是const
)。
其原因正是您所說的原因 - 因爲發生這種情況的方法是const
,因此無法變異*this
- 因此您需要非const
副本。
@andrewx no。賦值是指定給現有對象的時候:'Vector2 v; v = * this;'而不是'Vector2 v = * this;'。 –
是的,v
是*this
的全新對象。
假設你是一個Vector2
方法中,該運營商=
您正在使用被稱爲是有原因的分配副本。現在,它是否執行深層複製,淺拷貝(複製指針,但不是它們指向的對象),或者執行操作符的實際實現。
很好的補充到這個討論,謝謝 – johnbakers
這裏沒有任務。 –