这个作业是否会创建副本?

时间:2012-12-17 09:21:05

标签: c++

创建这个新对象v会导致一个全新的对象,还是*this引用的同一个对象空间?

Vector2 v = *this;

我不希望它实际上是在创建一个新对象,但是我在一个示例应用程序中看到了这个代码,然后操作这个新对象,即使这个代码在一个设置为const的类函数中。因此,我希望这个对象v实际上完全是一个独立的内存空间而不是*this

3 个答案:

答案 0 :(得分:5)

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

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

原因正是你所说的那个 - 因为发生这种情况的方法是const,所以无法改变const - 所以你需要一个非*this它的副本。

答案 1 :(得分:1)

假设您位于Vector2方法内,您使用的此运算符=称为副本分配,原因如此。现在,它是否进行深层复制,浅拷贝(复制指针,而不是它们指向的对象)或者是操作符的实际实现。

答案 2 :(得分:0)

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