Удаление объектов из памяти в C ++ - PullRequest
0 голосов
/ 21 ноября 2019

Я новичок в c ++, но из того, что я понял, вам нужно удалять объекты из памяти, когда вы закончите с ними.

Наличие класса myClass. Если я создам новый экземпляр и назову некоторые его функции. Вот так:

MyClass p;
p.funcCall(12);
p.anOtherFuncCall(4);

Как мне снова освободить память, занятую p? Я прочитал эту статью Microsoft. Но если я поменяю его на:

MyClass* p = new MyClass
... call fucntions
delete p;

, я больше не могу вызывать свои функции наподобие p.funcCall(12).

Если я неправильно понял управление памятью в c ++, я бы тоже хотел это услышать.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2019

В этом коде

MyClass p;
p.funcCall(12);
p.anOtherFuncCall(4);

Вам не нужно вручную удалять p. Он автоматически становится недействительным, как только выходит из области видимости. Это объясняется более подробно здесь . Вы можете просто оставить это так.

MyClass* p = new MyClass
... call fucntions
delete p;

Вы также можете сделать это так, если хотите. Поскольку p уже не MyClass, а указатель на единицу, синтаксис другой. Вместо этого вы должны написать это так:

p->funcCall(12);
0 голосов
/ 21 ноября 2019

Так что в основном C ++ не будет управлять памятью для вас, по крайней мере, это не стандартная функция языка. Это, конечно, не означает, что вам нужно хранить каждый объект как указатель и освобождать его вручную. В вашем случае объект инициализируется в локальной области действия , что означает, что он будет уничтожен, как только покинет эту область. Это потому, что вы создали его как значение, если вы сами выделили для него память (т.е. глобальную область), то вы несете ответственность за освобождение указанной памяти. Однако есть еще один вариант для указателей: использование интеллектуальных указателей автоматизирует очистку объектов в глобальной области видимости.

...