Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对C+的怀疑+;指针_C++_Qt_Pointers - Fatal编程技术网

C++ 对C+的怀疑+;指针

C++ 对C+的怀疑+;指针,c++,qt,pointers,C++,Qt,Pointers,当foo函数完成时,myClass指针会发生什么变化?它是自动删除的吗 bar函数完成后,myThread指针会发生什么变化?(假设myThread指向QThread对象) 谢谢你 这里你是C++,没有人会删除你的对象,如果你不这么做的话。你写的每一个new都需要你写一个delete来释放内存(就像在C中一样,每个malloc都需要一个free) 仅删除对象: void foo() { MyClass myClass; myClass.doSomething(); } 然后,当

foo
函数完成时,
myClass
指针会发生什么变化?它是自动删除的吗

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


谢谢你

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

仅删除对象:

void foo()
{
    MyClass myClass;
    myClass.doSomething();
}
然后,当foo返回时,
MyClass
的析构函数被调用。一般来说,除非您需要对象在您的范围外持久化,否则您更喜欢对象而不是指针,否则它将防止代码中的内存泄漏

需考虑的特殊情况:

  • 如果使用或甚至(请参阅),可以自动删除对象
  • Qt对象可以自动删除它的子对象,而无需通知您。请参阅:(可能与任何支持对象父代的SDK相同)
  • …所以,正如Christian所评论的,你不想把这两种解决方案混在一起

注意:对于QThread,完成后应要求删除它。看,

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

仅删除对象:

void foo()
{
    MyClass myClass;
    myClass.doSomething();
}
然后,当foo返回时,
MyClass
的析构函数被调用。一般来说,除非您需要对象在您的范围外持久化,否则您更喜欢对象而不是指针,否则它将防止代码中的内存泄漏

需考虑的特殊情况:

  • 如果使用或甚至(请参阅),可以自动删除对象
  • Qt对象可以自动删除它的子对象,而无需通知您。请参阅:(可能与任何支持对象父代的SDK相同)
  • …所以,正如Christian所评论的,你不想把这两种解决方案混在一起

注意:对于QThread,完成后应要求删除它。请参阅。

当您使用
new
实例化对象时,它将一直存在,直到对其调用
delete
。由于您使用的是原始指针,它们将一直存在,直到您自己调用
delete
或将它们传递给包含调用
delete
的消费函数。当您使用
new
实例化对象时,它将一直存在,直到对其调用
delete
。由于您使用的是原始指针,它们将一直存在,直到您自己调用
delete
或将它们传递给包含调用
delete
的消费函数。您应该告诉OP在可能的情况下(即,几乎总是)更喜欢唯一指针而不是共享指针。另外,避免在不必要的时候使用指针。谢谢你的回答。在bar函数中,我创建了一个指向线程对象的指针。我应该只在线程结束时删除这个指针吗?然后我需要在全局范围内声明指向它的指针可以被其他函数访问(例如getResult(double))?@KelvinSalton:GUI框架执行自定义内存处理是典型的。在这种情况下,您应该始终遵循框架的最佳实践和文档,而不是试图使用智能指针进行干预。同时,您不能假定GUI框架一般代表C++内存管理。当可能时,您应该告诉OP更倾向于在SydDyPosix上使用UNIQUIGY指针(几乎总是)。另外,避免在不必要的时候使用指针。谢谢你的回答。在bar函数中,我创建了一个指向线程对象的指针。我应该只在线程结束时删除这个指针吗?然后我需要在全局范围内声明指向它的指针可以被其他函数访问(例如getResult(double))?@KelvinSalton:GUI框架执行自定义内存处理是典型的。在这种情况下,您应该始终遵循框架的最佳实践和文档,而不是试图使用智能指针进行干预。同时,您不能假定GUI框架一般代表C++内存管理。