A pointer to a class that contains pointers



  • hi i have a class that contains pointers,the class iherits nothing
    @class MyClass
    {
    public:
    MyClass();
    ~MyClass();

    private:
    //i have pointers here
    };
    MyClass::~MyClass()
    {
    qDebug()<<"destroyed..";
    }
    @

    now i have to use this class as a pointer in vector like this:
    @QVector<MyClass*> classes;
    //push some classes in here but
    //when i remove an element
    classes.remove(index);
    //the destructor doesn't get called,and i think that is the true definition of memory leak@

    so how do i make it call the destructor



  • remove only removes the pointer from the vector, but does not delete the object itself, so you need to delete the object when removing it.

    @MyClass *class=classes.at(index);
    classes.remove(index);
    delete class;@



  • If you don't want to explicitly call delete, you could use a vector of shared pointers instead of using raw pointers in the vector.
    Unless you use said shared pointer you should implement the assignment operator and copy-constructor.

    Reason:
    @MyClass instance1;
    {
    MyClass instance2 = instance1;
    }
    // at this point the private pointers in instance1 have been deleted.
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.