重载C ++赋值运算符的行为类似于Java

卡尔·吉辛

在Java中,当您将一个对象分配给另一个对象时,不会复制原始对象,它只会克隆引用。因此,例如,我希望它的行为类似于以下Java代码:

SomeClass x = new SomeClass();
SomeClass y;
y = x; // x is not copied, y is simply a (Java) reference to x

我想做的是创建一个行为相同的C ++类。显而易见的选择是重载赋值运算符,如下所示:

SomeClass& operator=(const SomeClass& rhs)
{
    this = &rhs;
    return *this;
}

遗憾的是,this不允许将新位置分配给上面的代码甚至无法编译。

有谁知道其他方法吗?

另外,在您说什么之前:是的,我知道这绝对是实现赋值运算符的错误方法。求你了,算了

编辑2:为澄清起见,这是应表现为Java中的C ++代码:

SomeClass x = SomeClass(); // Created on stack
SomeClass y; // In C++, same as above; NOT reference or pointer
y = x; // x is not copied, y becomes a (C++) reference to x;
       // original y is destroyed when stack unwinds

我根本不想使用指针。

编辑:我正在这样做,以查看是否可以更改通过引用传递给函数的C ++对象的基地址。如果我只是将另一个对象分配给引用变量,它会自动创建一个浅表副本,而我不希望这样做。我希望引用参数引用完全不同的对象。

我这样做是为了查看编译器如何实现引用。如果引用是取消引用的指针的语法糖,则在函数外部,参数对象的基址将保持不变。如果它们是符号表中的别名(如PHP),则它将更改。(因此,没有使用指针的解决方案,因为这是我进行测试的“控件”。)

希望有道理。

亡灵鱼

这是不可能的。语言的工作原理根本不同。

SomeClass x在Java中,是某种指向SomeClass对象的指针或引用。这是一种间接方式,因此为什么您可以有多个引用同一对象的对象。

SomeClass x在C ++中,字面上就是对象。因此,SomeClass y这实际上是一个完全不同的对象。没有间接关系。因此,没有办法互相引用。

C ++提供了指针(SomeClass* x)和引用(SomeClass& x)来照顾需要间接访问的时间。也许这些是您实际要使用的,尽管这取决于您首先问这个问题的原因。


响应编辑:

不,您不能更改对象的地址。一个对象的实例将在其生命周期内仅位于一个位置,直到该对象被销毁/取消分配为止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中的赋值运算符重载

来自分类Dev

C ++赋值运算符和重载

来自分类Dev

C ++:赋值运算符后的++运算符重载

来自分类Dev

使条件运算符的行为类似于C中的if / else语句

来自分类Dev

我是否必须重载每个运算符才能使类的行为类似于其成员变量之一?

来自分类Dev

我是否必须重载每个运算符,才能使类的行为类似于其成员变量之一?

来自分类Dev

C ++重载:运算符的重载=

来自分类Dev

C ++-重载的赋值运算符内存泄漏

来自分类Dev

如何在C ++中重载赋值运算符

来自分类Dev

检测重载C ++运算符中的自赋值

来自分类Dev

C ++ const重载的赋值运算符机制

来自分类Dev

C ++矩阵类:重载赋值运算符

来自分类Dev

C ++赋值运算符=派生类的重载

来自分类Dev

在C ++中重载复合赋值运算符

来自分类Dev

重载C ++中字符数组的赋值运算符

来自分类Dev

我应该重载赋值运算符C ++吗?

来自分类Dev

如何在C ++中重载赋值运算符

来自分类Dev

C ++-重载的赋值运算符内存泄漏

来自分类Dev

赋值运算符重载 C++ 的返回值

来自分类Dev

C ++运算符重载++

来自分类Dev

C ++-重载[]运算符

来自分类Dev

C ++运算符重载

来自分类Dev

C ++“ *”运算符重载

来自分类Dev

C ++运算符>>重载

来自分类Dev

()运算符重载c ++

来自分类Dev

C ++运算符重载[]

来自分类Dev

C ++运算符重载?

来自分类Dev

C ++运算符重载

来自分类Dev

重载C ++赋值运算符,使其表现得像Java