对C ++指针的怀疑

时间:2017-02-08 19:58:57

标签: c++ qt pointers

myClass函数完成后,foo指针会发生什么?是自动删除吗?

myThread函数完成后,bar指针会发生什么? (假设myThread指向QThread对象)

void foo()
{
    MyClass *myClass = new MyClass();
    myClass->doSomething();
}

void bar()
{
    // Suppose that MyThread is a QThread class
    MyThread* myThread = new MyThread(2.5);

    // Connect the Thread to get the result
    connect(myThread, SIGNAL(sendResult(double)), this, SLOT(getResult(double)));

    // Start the thread
    myThread->start();
}

提前致谢

1 个答案:

答案 0 :(得分:3)

你在这里使用C ++,如果你不这样做,没有人会删除你的对象。您编写的每个new都要求您编写一个delete来释放内存(就像C中每malloc需要一个free)。

只有对象被删除:

void foo()
{
    MyClass myClass;
    myClass.doSomething();
}

然后在foo返回时调用MyClass的析构函数。一般情况下,除非您需要将对象保持在范围之外,否则优先于指针上的对象,它将防止代码中的内存泄漏。

需要考虑的特殊情况:

注意:对于QThread,您应该在完成后要求删除它。请参阅When or how to delete QThread in Qt