2

创建这个新对象 会产生v一个全新的对象还是只是引用相同的对象空间*this

Vector2 v = *this;

我不希望它实际上是在创建一个新对象,但是我在一个示例应用程序中看到了这段代码,该应用程序随后操纵了这个新对象,即使这段代码位于一个设置为const. 因此,我希望这个对象 ,v实际上完全是一个单独的内存空间,而不是*this.

4

3 回答 3

5

它正在创建一个新对象,是的 - 但通过初始化,而不是赋值。

但是,您可以通过使用引用来绕过它Vector2& v = *this;,在这种情况下,它是(或者,如果方法是)v的别名。*thisconst Vector& v = *thisconst

造成这种情况的原因正是您所说的-因为发生这种情况的方法是const,无法变异*this-因此您需要const它的非副本。

于 2012-12-17T09:21:39.263 回答
1

假设你在一个Vector2方法中,=你正在使用的这个操作符被称为复制赋值是有原因的。现在,无论是深拷贝、浅拷贝(复制指针,但不复制指针指向的对象)还是取决于操作符的实际实现。

于 2012-12-17T09:24:51.377 回答
0

是的,v是一个全新的对象*this

于 2012-12-17T09:22:24.330 回答