Pointers - delete

Status
Niet open voor verdere reacties.

Voldemort

Gebruiker
Lid geworden
21 jul 2006
Berichten
111
Ik gebruik Qt 4.3.0 snapshot om m'n programma's te maken. Nu ben ik volop bezig, maar ik vraag me af als ik dit doe:

file.h
Code:
#include <QDir>

class name
{
	public:
		name();
		QDir *dir;
};

file.cpp
Code:
#include "file.h"
name::name()
{
dir = new QDir();
}

En daar werk in een andere functie dan met (bv. dir->homePath()).

Nu is mijn vraag, moet ik dit doen in de destructor:

Code:
delete dir;

of is dit in zo'n geval niet nodig? Zoja, moet dit dan ook in alle andere dingen zoals QSslSocket, QTcpSocket, etc waarbij ik ook zulke dingen gebruik? Zonee, in welke gevallen wel?
 
Ja, je moet idd alle member pointers deleten in de destructor, tenminste zolang andere objecten er geen referentie meer naar bevatten.
Dit geldt voor alle objecten die je maakt met de new operator anders wordt het geheugen niet vrijgegeven.
Overigens in het makkelijkste om alle member pointers op NULL in te stellen en in de destructor te testen of deze niet NULL zijn. Member variabelen kan je het beste met m_ laten beginnen in de naam, dan weet je altijd dat het members zijn:

Code:
class MyObject
{
public:
 MyObject();
 virtual ~MyObject();
private:
 void* m_pObject;
};

MyObject::MyObject()
{
 m_pObject = NULL;
}

MyObject::~MyObject()
{
 if(m_pObject)
  delete m_pObject;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan