【发布时间】:2020-02-19 14:32:48
【问题描述】:
我有一个关于 C++ 问题的问题。假设我有一个非常大的班级,叫做BigClass,我说BigClass* foo = new BigClass();
假设我在 BigClass 中有一个方法,它定义了另一个 BigClass 类型的本地对象 tmp,在方法结束时,我通过使用 tmp 做一些事情来检查是否有错误,如果没有,我想要将this 取消引用到该对象。我不想将所有参数从tmp 复制到this,因为对象太大,过程会很慢。有没有办法在自己的方法中取消引用对象?
例子:
class BigClass
{
int a;
long b;
std::vector<int> c;
// other members...
void replace()
{
BigClass* tmp = new BigClass();
// do some calculations with tmp
*this = tmp; // problem
}
}
为什么 *this = tmp 是个问题?
我定义了一个 operator= 来做这样的事情:
this.a = src.a;
this.b = src.b;
this.c = src.c;
.
.
.
但是我复制了所有成员变量,这很慢。我想简单地取消引用对象而不是复制所有成员变量。
【问题讨论】:
-
如果你不想复制,
move它。虽然像this = new Bigclass()这样的东西是非法的。 -
"有什么方法可以在对象自己的方法中取消引用?"不太清楚,你是在问你是否可以做
*this?是的你可以。一些代码真的很有帮助 -
如果你添加一个你正在尝试做的例子,我会投票支持重新开放
-
我不想将所有参数从
tmp复制到this— 我假设您的意思是复制所有成员变量/子对象。那么为什么?你不抄袭的理由是什么?如果出于性能原因,您可以简单地移动它们,*this = std::move(tmp);。
标签: c++ c++11 pointers copy dereference