Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ 由于删除对象而导致的Cpp代码主线程冻结是否可以使用智能指针解决?_C++_Qt_Pointers_Smart Pointers - Fatal编程技术网

C++ 由于删除对象而导致的Cpp代码主线程冻结是否可以使用智能指针解决?

C++ 由于删除对象而导致的Cpp代码主线程冻结是否可以使用智能指针解决?,c++,qt,pointers,smart-pointers,C++,Qt,Pointers,Smart Pointers,我在我的代码中使用了Qt和cpp,我在其中创建了一个包含大量数据的类(比如在RAM中约100MB)。在这个类的析构函数中,我使用while循环删除这个数据。问题是,当我调用这个类的delete时,主线程冻结,因为它正忙于删除这个数据。 有人告诉我,智能指针是解决方案,因为它会自动释放内存,我不必显式调用delete,但我怀疑智能指针是否也只会释放主线程中的内存。 我想知道智能指针所做的删除是否在主线程中完成 代码示例为: 示例.h \ifndef示例 #定义示例 #包括 #包括 #包括 #包括

我在我的代码中使用了Qt和cpp,我在其中创建了一个包含大量数据的类(比如在RAM中约100MB)。在这个类的析构函数中,我使用while循环删除这个数据。问题是,当我调用这个类的delete时,主线程冻结,因为它正忙于删除这个数据。 有人告诉我,智能指针是解决方案,因为它会自动释放内存,我不必显式调用delete,但我怀疑智能指针是否也只会释放主线程中的内存。 我想知道智能指针所做的删除是否在主线程中完成

代码示例为: 示例.h

\ifndef示例
#定义示例
#包括
#包括
#包括
#包括
#包括
班级临时工
{
私人:
QList*m_颜色列表;
公众:
温度();
void addList();
~Temp();
};

#endif
智能指针将自动为您删除对象。仅此而已。在封面下,一个智能指针将为您调用delete,这将执行析构函数


除非您将其设置为在不同的线程中执行,否则任何内容都不会在不同的线程中运行。虽然您可以在线程中执行此删除操作,但您将负责确保在删除对象时,主线程中的任何内容都不会访问该对象-显然,如果您试图在删除对象时(或之后)访问该对象的一部分然后您可能会使程序崩溃。

智能指针将自动为您删除对象。仅此而已。在封面下,一个智能指针将为您调用delete,这将执行析构函数


除非您将其设置为在不同的线程中执行,否则任何内容都不会在不同的线程中运行。虽然您可以在线程中执行此删除操作,但您将负责确保主线程中的任何内容都不会在对象被删除时访问对象-显然,如果您试图在对象被删除时(或之后)访问对象的一部分,那么您的程序可能会崩溃。

添加代码示例,PleaseSome什么取决于您的智能指针-对于共享\u ptr,删除由删除最后一个对象引用的线程完成…添加代码示例,PleaseSome什么取决于您的智能指针-对于共享\u ptr,删除由删除最后一个对象引用的线程完成…这意味着如果最后一个对象(使用智能指针的)将在主线程中删除,然后智能指针的析构函数也将在主线程中运行?Thanx以研究此问题。@gbjbaanb告诉的描述是正确的。析构函数仅在主线程中被调用。这意味着如果最后一个对象(使用智能指针的对象)正在主线程中删除,则智能指针的析构函数也将在主线程中运行?Thanx用于研究此问题。@gbjbaanb告诉的描述是正确的。析构函数仅在主线程中调用。