diff options
Update README.md
1 files changed, 58 insertions, 0 deletions
| -rw-r--r-- | Sem. 10/README.md | 58 |
diff --git a/Sem. 10/README.md b/Sem. 10/README.md index 26780a0..a636bbb 100644 --- a/Sem. 10/README.md +++ b/Sem. 10/README.md @@ -25,3 +25,61 @@ int result = *ptr; cout << result; //10 ``` + +Разлика между указател и референция? + + - Указателят може да се "re-assign"-ва. Може да приема нови стойност + - Референцията трябва да се инициализира при създаването. + - Указателят има неутрална стойност (nullptr), а референцията няма. + - Може да се направи масив от указатели, но не и масив от референции. + + +## Динамична памет +**stack** +- паметта се заделя ПРЕДИ да се компилира програмата. +- паметта се освобождава/трие/маркира като свободна автоматично - при излизането от scope-а, в който е дефинирана. + +Искаме памет по време на изпълнението на програмта? +**heap** + - Масиви и обекти без предварително да е известна големината. + + +Оператор **new** + +- Връща указтел към началото на паметта + +```c++ +new int[n]; n НЕ е задължително да е константа! +``` + +Заделянето на динамична памет е много "бавна" операция!! + +Динамична памет НЕ се трие автоматично. + +Оператор delete[] Освобождава/маркира като свободна динамична памет! + + +```c++ +void f() +{ + int x = 40; + char ch[2] = {'a', 'b'}; + int* ptr = new int[3] +} +``` + + + +След приключването на функцията ще се изчисти паметта в стека, но НЕ и паметта в heap-а. + +За това ние трябва ръчно да я маркираме като свободна. + +```c++ +void f() +{ + int x = 40; + char ch[2] = {'a', 'b'}; + int* ptr = new int[3]; + <br> delete[] ptr; <\br> +} +``` |
