创建这个新对象 会产生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
它的非副本。
假设你在一个Vector2
方法中,=
你正在使用的这个操作符被称为复制赋值是有原因的。现在,无论是深拷贝、浅拷贝(复制指针,但不复制指针指向的对象)还是取决于操作符的实际实现。
是的,v
是一个全新的对象*this
。