我刚刚开始接触 C++(我是一位经验丰富的 Python/Java 开发人员,正在接触 OpenCL 的更好部分),我对如何将对象传递给函数感到非常困惑。
假设我有一个简单的课程:
class Thing {
int var;
int var2;
int var3;
void doSomething();
};
现在,这个类的“大小”至少是3*sizeof(int)
(我不确定是否存储了函数指针)。现在说我有两个函数签名:
void doThing1(Thing t);
void doThing2(Thing* t);
当我调用时doThing1
,是否会导致整个实例被复制到堆栈中?当我打电话doThing2
时,它只需要sizeof(Thing*)
堆栈空间吗?
互联网上的许多“传统智慧”一直在告诉我尝试使用 的函数签名doThing1
,但乍一看这似乎很愚蠢——如果它确实复制了整个对象。
我还假设如果一个函数要修改堆上的对象(使用new
关键字创建),它应该看起来像doThing1
.
请纠正我的无知。要么我的 Google 搜索没有帮助,要么 Google 没有帮助。