小编Kir*_*ill的帖子

如何在对象成员函数内重新分配`this`指针?

我有一个关于C++指针的有趣问题.

你可能会认为我必须改变我的设计,避免做我正在做的事情,你可能是对的.但是我们假设我有充分的理由按照我的方式去做.

所以这就是情况.我有一个C++类TestClass,我有一个这种类型的指针A:

TestClass* A = new TestClass();
Run Code Online (Sandbox Code Playgroud)

TestClass除此之外还有这个功能:

void TestClass::Foo(){
    TestClass* B = new TestClass();
    ...
}
Run Code Online (Sandbox Code Playgroud)

此函数创建相同类型的对象B,并使用一些数据填充它.

在这个函数的最后,我希望指针A指向对象B.在这个函数之外的任何地方它看起来像A=B; 在这个函数中它可能看起来像 但你知道你不能重新分配"this"指针.this = B

可能的解决方案:

  1. 复制内存:

    memcpy(this, B, sizeof(TestClass));
    
    Run Code Online (Sandbox Code Playgroud)

    此方法正常工作.该函数将对象B的每个位复制到对象A中.
    问题:如果TestClass是一个大对象(并且它是),它会为多个Foo调用创建显着的性能开销.

  2. 从函数返回一个B指针并执行类似的操作

    Temp = A;
    A=A->Foo();
    freeMemory(Temp);
    
    Run Code Online (Sandbox Code Playgroud)

    但是这段代码看起来很愚蠢,而且它使得函数Foo很难使用.

所以问题是,如何this = B在成员函数内部完成,而不复制整个对象?

c++ pointers this

6
推荐指数
3
解决办法
6828
查看次数

标签 统计

c++ ×1

pointers ×1

this ×1