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++内存管理。