Я не совсем понимаю динамически выделенную память, и я надеюсь, что вы, ребята, можете сделать все более понятным для меня.C++ динамически распределенная память
Прежде всего, каждый раз, когда мы выделяем память, мы просто получаем указатель на эту память.
int * dynInt = new int;
Так что разница между делать то, что я сделал выше и:
int someInt;
int* dynInt = &someInt;
Как я понимаю, в обоих случаях память выделяется для междунар, и мы получаем указатель на эту память.
Так в чем же разница между ними. Когда один метод предпочтительнее другого.
Более того, почему мне нужно, чтобы освободить память с
delete dynInt;
в первом случае, но не во втором случае.
Моих догадок:
Когда динамическое выделение памяти для объекта, объект не инициализированы, а если вы делаете что-то вроде во втором случае объект прибудет инициализируются. Если это единственное отличие, есть ли какая-то мотивация, кроме того, что динамическое распределение памяти происходит быстрее.
Причина, по которой нам не нужно использовать удаление для второго случая, состоит в том, что тот факт, что объект был инициализирован, создает какую-то рутину автоматического уничтожения.
Это просто догадки, если бы кто-то меня исправил и уточнил для меня.
Если вы не уверены, следуйте простому правилу: «Никогда не используйте указатели, никогда не используйте« новый ». Как только вы поймете необходимость в ресурсе, управляемом вручную, вы узнаете, когда нарушить это правило. –
Umm Могу ли я настоятельно предложить вам открыть книгу о C++ .. области переменных, управление динамической памятью, как правило, обсуждаются в 4-й или 5-й главе любых книг начинающих C++. @KerrekSB Я бы не сказал, что .. Особенно в этом случае неопределенность не исходит от амбициозности, а вместо этого недостаточно знаний - если вы не уверены, убедитесь, что вы достаточно читаете, чтобы вы были уверены. – paul23
Динамическое выделение памяти обычно _slower_, а инициализация не имеет ничего общего с этим. –