我有一个关于 C++ 指针的有趣问题。
你可能会认为我必须改变我的设计,避免 做我正在做的事,你可能是对的。 但让我们假设我有充分的理由按照自己的方式去做。
原来是这样的。我有一个 C++ 类 TestClass,我有一个这种类型的指针 A:
TestClass* A = new TestClass();
除其他事项外,TestClass 具有以下功能:
void TestClass::Foo(){
TestClass* B = new TestClass();
...
}
此函数创建相同类型的对象 B 并用一些数据填充它。
在这个函数的最后,我希望指针 A 指向对象 B。
在这个函数之外的任何地方它看起来像 A=B
;在这个函数里面
它可能看起来像 this = B
但如您所知,您不能重新分配“this”指针。
可能的解决方案:
复制内存:
memcpy(this, B, sizeof(TestClass));
此方法工作正常。该函数将对象 B 的每一位复制到对象 A 中。
问题:如果 TestClass 是一个大对象(确实如此),它会在多个 Foo 调用的性能上产生显着的开销。从函数返回一个 B 指针并做类似这样的事情
Temp = A; A=A->Foo(); freeMemory(Temp);
但是这段代码看起来很愚蠢,而且它使得函数 Foo 很难使用。
所以问题是,如何在成员函数内部执行 this = B
,而不复制整个对象?
最佳答案
使用额外的间接级别。您的 TestClass 可以有一个指向包含其所有数据的类的指针。
class TestClass
{
private:
TestClassData* m_data;
};
void TestClass::Foo()
{
TestClassData* B = new TestClassData();
...
delete m_data;
m_data = B;
}
如果 m_data 的内容相等,请确保您的 operator==
返回 true。
关于c++ - 如何在对象成员函数中重新分配 `this` 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050044/