gpt4 book ai didi

c++ - 什么时候通过 T*& p 而不是 T* p?

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:51 25 4
gpt4 key购买 nike

我想了解传递 *&p*p 之间的区别以及何时使用它们。

比如说,我有一个如下所示的初始化函数。

void init(lua_State *L) {
L = luaL_newstate(); //allocate new memory to L
}

main() 中,如果我尝试访问 L,它会崩溃。

lua_State *L;
init(L);
do_something(L);//crash

但是,当我将参数类型更改为 lua_State *&L 时,它不再崩溃。

是否因为分配新的内存改变了指针的值?

如果是这样,总是使用 *& 而不是 * 不是更好更安全吗?

关于这个有什么一般规则吗?

最佳答案

I would like to understand the difference between passing *&p and *p and when to use one over another.

您的目标是在 init 中更改 L 的值,并确保更改在调用函数中可见。

将指针传递给 init 不起作用,因为对参数的任何更改都只是局部更改。它不会更改调用函数中变量的值。因此,指针在 main 中保持未初始化状态。在 main 中使用未初始化的指针会导致未定义的行为,表现为系统崩溃。

我建议将 init 的参数类型更改为对指针的引用。当您这样做时,对参数的任何更改都将在调用函数中可见。

void init(lua_State*& L) {
L = luaL_newstate(); //allocate new memory to L
// The new value of L will be visible in the calling function.
}

并将其用作

lua_State *L;
init(L);
do_something(L);

关于更好的编码实践的建议 - 始终在声明时初始化自动变量。

lua_State* L = nullptr;
init(L);
do_something(L);

关于c++ - 什么时候通过 T*& p 而不是 T* p?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51054342/

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