c++ - 类能否使用此指针或其他方式将自身指向不同的地址?

标签 c++ this

<分区>

一个类是否可以使用例如这个指针?我正在寻找一种在两个对象之间共享数据的方法。例如,如果一个对象的值与另一个对象相同,我会删除一个对象并将两个对象指向相同的数据以节省空间。以下是我在网上找到的示例代码,可以清楚地解决我的问题,但无法编译。

#include<iostream>
using namespace std;

class Test
{
private:
  int x;
public:
  Test(int x = 0) { this->x = x; delete this;}
  void change(Test *t) { this = t; }
  void print() { cout << "x = " << x << endl; }
};

int main()
{
  Test obj(5);
  Test *ptr = new Test (10);
  obj.change(ptr);
  obj.print();
  return 0;
}

错误信息是:

//~>g++ -std=c++14 mm.C -o mm 
//mm.C: In member function ‘void Test::change(Test*)’:
//mm.C:10:33: error: lvalue required as left operand of assignment
//void change(Test *t) { this = t; }

最佳答案

没有。 C++ 中“对象”的定义是“存储区域”(ish)。所以你的对象的存在实际上与“它在哪里”有关。这就是 this 无法修改的原因。

你不能移动它。您可以假装移动它(使用移动语义有效地转移资源/数据的所有权,然后让原始对象超出范围),但您不能从类本身内部执行此操作。

在外部而不是在管理对象生命周期和其他内容的代码中执行此操作。

关于c++ - 类能否使用此指针或其他方式将自身指向不同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591869/

相关文章:

javascript - addEventListener 回调中的 this 关键字

c++ - 使用 gcc 编译内联汇编时出错, "shl"

c++ - 将此 c-cast 更改为 reinterpret_cast 是否安全?

c++ - 如何保存帧缓冲区然后将其取回

JavaScript:使用 'this.' 调用函数不引用类中的方法

javascript - 函数内的函数作用域 - Javascript

c++ - Engine.exe : 0xC0000005: Access violation 中 0x00000000 处的未处理异常

c++ - 使用指向显式加载的 DLL 函数的静态指针创建类

PHP: `array(&$this)` 是什么意思?

java - 为什么 void 方法中不允许使用 this() ?