2014-10-13 3 views
-4

В C++, я видел 2 способа создать новую-структуру:В чем разница между структурой и новой структурой?

1.

StructA a; 
a.member1 = ...; 
foo(&a); // void foo(StructA* a); 

2.

StructA* a = new StructA; 
a->member1 = ...; 
foo(a); 

Каковы различия и последствия этих 2 кода snipets?

Благодаря

+0

Второй - указатель на структуру; первая - это объявление прямой переменной. –

+0

Как вы думаете, какая разница? Я прошу понять, как/на что ответить, поскольку ваш ответ даст мне «уровень». –

+1

Второй требует от вас теперь управлять тем, что вы только что выделили. – chris

ответ

0

Разница в двух словах:
StructA a объявляет переменную, которая является StructA.
StructA* a объявляет указатель, указывающий на StructA.

Последствия:

Переменная StructA будет сразу можно использовать для хранения данных.
Указатель StructA* должен быть установлен так, чтобы указывать на фактическую структуру, прежде чем он сможет использоваться для хранения данных.

Переменная StructA будет автоматически освобождена при выходе текущего блока.
Пока указатель StructA* будет освобожден, когда текущий блок выйдет, данные, на которые он указывает (созданный с помощью new), не исчезнут, пока не вызывается delete. Если delete никогда не вызывается, ваша программа будет иметь утечку памяти.

Смежные вопросы