gpt4 book ai didi

c++ - 当返回类型是一个类时,指向返回值的指针的名称是什么?

转载 作者:行者123 更新时间:2023-11-28 07:07:51 26 4
gpt4 key购买 nike

一个例子:


class A  
{
....
A func();
};

A A::func()
{
...
return something;
}

在汇编级别,编译时,函数A::func 实际上有两个参数:第一个是this 指针,第二个是临时 A 对象的地址,由调用者创建以存储返回值。

例如,如果我们编写a.func(),程序将创建一个临时的A对象(我们称它为t)在栈中,将a的地址作为第一个参数,将t的地址作为第二个参数,最后调用函数func

我的问题是:在A::func的实现中,我们可以得到a的地址——就是指针this ;但是我们有办法得到t的地址吗?它叫什么名字?

例如,如果我想在返回结果之前进行一些内存分配/释放,那么拥有它会很有用。

这是我想做的一个例子:

class A
{
int * data;
A func();
};

A A::func()
{
// here "ret_p" is the pointer to the return value (let's pretend that it exists)
ret_p->data = new int[some length];
...
return * ret_p;
}

当然,我可以在A::func中创建一个本地对象,然后返回;但是随后程序将在我的本地对象和调用者创建的临时对象之间进行复制。由于调用者已经创建了一个临时对象,我希望直接使用它可以节省时间和空间。那可能吗?

嗯,这可能是出于 c++,但我仍然希望...

最佳答案

堆栈中没有这样的临时A对象参数(t)。

如果你调用 A a1 = a.func();return something; 里面,copy constructor 会被调用,等价的到这个 A a1(something);a1something 是不同的实例。

如果你A a1; a1 = a.func();return something; 在里面,a1 = something;//(operator =) 将被调用。 a1something 是不同的实例。

如果你在里面调用A a1 = a.func();return A(p1);,这相当于A a1(p1) ;,有一个实例a1

如果您直接调用 a.func(); 而没有分配给 var 并且在 return something; 内部,return 时什么也不会发生。

如果你直接调用a.func();而不赋值给一个var并且在return A(p1);里面,一个temp对象会被构造然后销毁立即。

如果你A a1; a1 = a.func();return A(p1);里面会构造一个temp对象,然后调用operator= a1 = temp object; 然后临时对象将被销毁。

供您引用。

毕竟,A a1 = a.func()A a1; a1 = a.func(), 返回一些东西;//一个 varreturn A(p1);//调用构造函数 会导致不同的行为,我认为你可以正确控制内存。

关于c++ - 当返回类型是一个类时,指向返回值的指针的名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com