Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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++_New Operator_Deque_Delete Operator - Fatal编程技术网

C++ 新建和删除运算符,而不影响指向该类的指针组的内容

C++ 新建和删除运算符,而不影响指向该类的指针组的内容,c++,new-operator,deque,delete-operator,C++,New Operator,Deque,Delete Operator,我有一个问题,我一直在处理,因为过去两天,但作为一个相当缺乏经验的程序员,这是正常的,我想。我的问题可能有一个简单的解决办法,但我找不到一个快速的参考,所以决定问别人 在应用程序的一个线程中,我使用new创建一个指向用户定义类的指针。紧接着,我使用push_back()方法将新创建的指针推入指向该用户定义类的deque指针中 这个关注的deque已经从应用程序的主函数传递给这个线程,在主循环中处理这个用户定义类的内容。因此,当一个新指针进入deque时,它将进入主线程并使用 我的问题是,我需要确

我有一个问题,我一直在处理,因为过去两天,但作为一个相当缺乏经验的程序员,这是正常的,我想。我的问题可能有一个简单的解决办法,但我找不到一个快速的参考,所以决定问别人

在应用程序的一个线程中,我使用
new
创建一个指向用户定义类的指针。紧接着,我使用
push_back()
方法将新创建的指针推入指向该用户定义类的
deque
指针中

这个关注的deque已经从应用程序的主函数传递给这个线程,在主循环中处理这个用户定义类的内容。因此,当一个新指针进入deque时,它将进入主线程并使用

我的问题是,我需要确保分配给此类内容的内存在使用后应该被释放,因为它们存储非常大的图像数组。否则,程序将崩溃。为此,我在线程中的
push_back()
调用之后立即使用了
delete
,假设内存最终可用,但只存储在
deque
中。但是,显然,
deque
中指针指向的地址的内容也被删除。这不是我想要的


有没有一种方法可以在不引入指针的情况下将两者解耦?我认为
new
delete
仅在指针中有效。更确切地说,有没有办法把这个类的内容传递给<代码> DEQue/COD>,然后删除它,而不影响<代码> DEQu< /COD>?< /P> < P>而不是使用原始指针,考虑使用:

指针容器提供用于保存已分配堆的容器 以异常安全的方式和最小的开销创建对象。目的 特别是在C++中,使OO编程更容易 通过建立一套标准的类、方法和设计 处理面向对象的特定问题

但这是一个有效的选择,如果:

否则,如果您的图像文件指针被共享,请考虑在注释中使用<代码> STD::SysDypPTR < /C>。p>


如果Boost指针容器适合您的需要,您可以使用
std::unique_ptr
std::shared_ptr
查找
std::shared_ptr
。可能最好使用
deque
std::shared_ptr
来代替。我使用了Boost::shared_ptr和deque来共享指针,这似乎解决了我的问题。谢谢你的建议。真的谢谢你。我使用了boost库的共享指针。我不再删除共享指针。但是,在一个连续的进程中,仍然存在一些内存泄漏。因为当我在应用程序运行期间检查PC的内存使用情况时,它会线性增加,再次导致应用程序崩溃。一个问题:我用共享指针指向的对象也包含指向其他对象的指针,这些对象是用new创建的。我是否需要在整个应用程序的任何地方应用共享指针,或者我的问题与此无关?@user2365979能否在崩溃之前发布代码并结束错误?这是信号(SIGSEV)吗?
the stored objects are not shared, but owned exclusively, or

the overhead implied by smart pointers is inappropriate