我有一个关于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
可能的解决方案:
复制内存:
memcpy(this, B, sizeof(TestClass));
Run Code Online (Sandbox Code Playgroud)
此方法正常工作.该函数将对象B的每个位复制到对象A中.
问题:如果TestClass是一个大对象(并且它是),它会为多个Foo调用创建显着的性能开销.
从函数返回一个B指针并执行类似的操作
Temp = A;
A=A->Foo();
freeMemory(Temp);
Run Code Online (Sandbox Code Playgroud)
但是这段代码看起来很愚蠢,而且它使得函数Foo很难使用.
所以问题是,如何this = B在成员函数内部完成,而不复制整个对象?