c ++ ссылка на указатель - PullRequest
2 голосов
/ 25 января 2012

У меня есть следующий псевдокод:

function1()//Gets called on startup
{
    myclass* obj;
    function2(obj);
    obj->doSomething();//crashes here!
}

function2(myclass*& ret)
{
    myclass* nobj = &myclass();
    nobj->doSomething();//Does not crash
    ret = &nobj;
}

Может показаться, что даже если я устанавливаю ret для указания на nobj, когда я пытаюсь работать с obj (который должен указывать на nobj, как retэто ссылка на объект), моя программа падает!Понятно, что я делаю что-то не так, кто-нибудь знает, что это такое?

Ответы [ 2 ]

7 голосов
/ 25 января 2012

Вы берете адрес временного объекта, выполняя &myclass(), что является "нет-нет", потому что временное уничтожается в конце выражения, и ваш компилятор не должен его разрешать.

Хотя ваш компилятор уже не соответствует этой области, вы собираетесь использовать разрушенный объект, что является неопределенным поведением и поэтому ваш код дает сбой.

Кроме того, я не уверен, как вы назначаете указательна указатель на myclass (&nobj) на указатель на myclass (ret).Он не должен компилироваться.

2 голосов
/ 25 января 2012

попробуйте с:

myclass *obj = new myclass();
obj->doSomething();
delete obj;
...