创建这个新对象v
会导致一个全新的对象,还是*this
引用的同一个对象空间?
Vector2 v = *this;
我不希望它实际上是在创建一个新对象,但是我在一个示例应用程序中看到了这个代码,然后操作这个新对象,即使这个代码在一个设置为const
的类函数中。因此,我希望这个对象v
实际上完全是一个独立的内存空间而不是*this
。
答案 0 :(得分:5)
它正在创建一个新对象,是 - 但是通过初始化,而不是赋值。
然而,您可以通过使用引用Vector2& v = *this;
来绕过它,在这种情况下,v
是*this
(或const Vector& v = *this
的别名,如果方法是{{1} }})。
原因正是你所说的那个 - 因为发生这种情况的方法是const
,所以无法改变const
- 所以你需要一个非*this
它的副本。
答案 1 :(得分:1)
假设您位于Vector2
方法内,您使用的此运算符=
称为副本分配,原因如此。现在,它是否进行深层复制,浅拷贝(复制指针,而不是它们指向的对象)或者是操作符的实际实现。
答案 2 :(得分:0)
是的,v
是*this
的全新对象。