нет, вы должны использовать delete
перед присвоением NULL
delete obj; //free memory
obj=NULL;
это потому, что фактическим параметром для удаления является адрес выделенной памяти, но если вы назначите NULL до того, как будет использоваться delete
, вы фактически передаете NULL delete
, и ничего не произойдет, и вы получите себя утечка памяти .
ваш вопрос для редактирования:
этот код не будет компилироваться, так как obj
не определен вне области действия while
, в любом случае также l является list<string>
, и вы пытаетесь вставить типы MyClass*
, это приведет к еще одна ошибка компиляции. также вы должны использовать obj->Variab
, а не obj.Variab
, так как obj
является указателем.
РЕДАКТИРОВАТЬ, чтобы РЕДАКТИРОВАТЬ:
хорошо, вы все еще получили ошибку компиляции, так как obj
не определено, когда вы пытаетесь delete
это. попробуйте это:
#include <iostream>
#include <list>
using namespace std;
class MyClass {
public:
string Variab;
};
void myfunction (const string& s) {
cout << " " << s;
}
int main()
{
int i=0;
list<string>l;
while (i<100) {
MyClass *obj = new MyClass();//allocate memory
obj->Variab="HELLO";
l.push_back(obj->Variab);
i=i+1;
delete obj; //free memory
}
for_each (l.begin(), l.end(), myfunction);
}