对C++指针的怀疑

Doubts about C++ pointers

本文关键字:怀疑 指针 C++      更新时间:2023-10-16

foo函数结束时,myClass指针会发生什么?它会自动删除吗?

bar函数结束时,myThread指针会发生什么情况?(假设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();
}

提前感谢

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

只有对象被删除:

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

然后在foo返回时调用MyClass的析构函数。一般来说,除非你需要对象在你的范围之外是持久的,更喜欢对象而不是指针,否则它可以防止代码中的内存泄漏。

需要考虑的特殊情况:

  • 如果使用std::shared_ptr甚至unique_ptr,则对象可能会自动删除(请参阅unique_ptr和shared_ptr之间的差异)
  • Qt对象可以在不通知您的情况下自动删除它的子对象。请参阅:Qt中的内存管理?(对于任何支持对象父子关系的SDK来说都可能相同)
  • 。。。。因此,正如克里斯蒂安所评论的那样,你不想把这两种解决方案混合在一起

注意:对于QThread,您应该要求在完成时将其删除。请参阅何时或如何删除Qt中的QThread。