2015-08-14 4 views
-7

Как напечатать значение ссылки на указатель?Как напечатать значение ссылки на указатель

int& createInt(){ 
    auto uPtr = make_unique<int>(2); 
    auto ptr(uPtr.get()); 
    return *ptr; 
} 

Как напечатать значение 2, когда я звоню createInt() функцию?

int& x = createInt(); // what will be the value of "x" 
+5

Код, который вы опубликовали, является неопределенным поведением, поскольку вы будете печатать значение по удаленному адресу. – utnapistim

+1

'std :: cout << * ptr << std :: endl;' возможно? –

+2

Или 'std :: cout << 2 << std :: endl;'. – juanchopanza

ответ

0

Это не сработает, потому что unique_ptr автоматически освободит его, когда он выйдет из сферы действия.

http://en.cppreference.com/w/cpp/memory/unique_ptr

, что вы можете сделать, это

int createInt(){ 
    return 2; 
} 

или

int* createIntPtr(){ 
    return new int(2); 
} 

хотя это, вероятно, плохая практика. Есть другие вещи, которые вы можете сделать, например, передать ссылку на значение и отредактировать его, в зависимости от того, что вы хотите.

+0

Можно вернуть действительную ссылку на локальную статическую переменную. –

+0

Я что-то не понимаю? Если это уникальный_ptr, то память должна быть незащищенной, когда функция заканчивается, что означает, что даже если данные по-прежнему будут одинаковыми при доступе позже, это небезопасно. –

+0

Нет вашего понимания. Я просто хотел отметить это для полноты. –