class C{ //methods and properties } void C::some_method(C* b){ delete this; this = b; }@H_403_3@这在编译时给我以下错误:
error: lvalue required as left operand of assignment@H_403_3@我的意图:
说有C类的对象a和b,C类的内容可以是非常巨大的,而且通过字段的复制可能是非常昂贵的.我想要以一种经济的方式将“a”的所有内容替换为b.默认的复制构造函数会执行预期的任务吗?
我发现一些叫做“移动构造函数”
http://akrzemi1.wordpress.com/2011/08/11/move-constructor/也许,这可能会得到我想要的效果.
解决方法
这个指针是一个隐含的指针,指向您正在工作的上下文对象,您无法重新分配该对象.
根据Stroustrup的圣经(C编程语言,第3版),这表示为
C * const this@H_403_3@这意味着你有一个指向你的类C的指针,所以编译器会抱怨,如果你尝试改变它.
编辑:
当我被修正时,上述表达式并没有完全正确地描述这一点,因为这实际上是一个右值.