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