2015-02-11 2 views
2

Является ли следующий код C++ совместимым со стандартом?Ссылка на указатель разуплотненного

int *p; 
p = new int; 

int &n = *p; 
n = 5; 

Кроме того, я прав, полагая, что этот код будет существенно выделять память для междунар, а затем дать имя, в частности, п, в эту ячейку памяти, которая может быть использована как обычная переменная типа INT?

+0

Это правильно. Вы можете распечатать значения с помощью 'cout' и проверить сами. :) – eigenchris

+0

Уверены, ссылки и указатели схожи. Тем не менее, вы запутываете исходный указатель p (будучи выделенным) ссылкой n. Это проблема, если оригинал не освобождается. –

+1

Я подумал об этом, и я подумал, что даже если указатель p потерялся, я мог бы освободить память с помощью 'delete & n'. Я не могу думать о каких-либо ситуациях, когда это действительно поможет. – Vaelus

ответ

4

Данный код

int *p; 
p = new int; 

int &n = *p; 
n = 5; 

является действительным.

Я бы написал «yep» как ответ, но правила SO - и иногда очень основанные на правилах пользователи - не допустят такого краткого ответа.