将堆栈分配的对象作为指针参数发送到其他一些函数是否合适?

yes*_*aaj 7 c++ parameters function

将堆栈分配的对象作为指针参数发送到其他一些函数是否合适?

小智 12

是的,但对于这种情况,更常见的C++习惯用法是使用引用(可能是const引用)而不是指针.而不是

void foo( sometype * p ) {
   p->func();
}
Run Code Online (Sandbox Code Playgroud)

你写:

void foo( sometype & p ) {
   p.func();
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您不需要取消引用调用者中的对象:

void afunc() {
   sometype t;
   foo( t );
}
Run Code Online (Sandbox Code Playgroud)

并且还向读者提供潜意识提示,即您不打算将该函数用于获取对象的所有权.

  • "可能是一个const引用":const&s非常好,应该尽可能使用,但每当函数打算更改参数的值时,你应该传递一个指针而不是一个引用,所以很明显你打算修改它参数.记忆所有权应该是很好的文件 (3认同)

Nav*_*een 10

如果您确定该调用是同步的,那么将堆栈分配的对象的地址发送给该函数是完全有效的.如果调用是异步的(即您调用的函数将指针传递给另一个线程),那么它肯定会产生问题,因为即使在堆栈分配的对象被破坏后,您也可能尝试从不同的线程访问内存地址.


Ass*_*vie 6

只要接收功能没有假设它获得资源的所有权(并试图释放它),当然.但参考可能是一个更好的主意.