Я хотел бы понять разницу между передачей *&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
, он больше не падает.
Это потому, что выделение новой памяти меняет значение указателя?
Если так, разве не лучше и безопаснее всегда проходить с *&
вместо *
?
Есть ли какое-то общее правило по этому поводу?