New和delete操作符不影响指向该类的指针的Deque的内容
New and delete operators without effect on the contents of a Deque of pointers to this class
我有一个问题,我已经处理了两天,但作为一个相当缺乏经验的程序员,我认为这是正常的。我的问题可能有一个简单的解决办法,但是我找不到一个快速的参考资料,所以决定问别人。
在应用程序的一个线程中,我用new
创建了一个指向用户定义类的指针。紧接着,我用push_back()
方法将新创建的指针压入指向这个用户定义类的指针的deque
中。
所关注的deque是从应用程序的主函数传递给这个线程的,在主循环中处理这个用户定义类的内容。因此,当一个新的指针进入deque时,它将在主线程中被获取并使用。
我的问题是,我需要确保分配给该类内容的内存在使用后应该被释放,因为它们存储非常大的图像数组。否则,程序将崩溃。为此,我在线程中的push_back()
调用之后立即使用delete
,假设内存最终是空闲的,但只存储在deque
中。然而,显然,deque
中的指针所指向的地址的内容也被删除了。这不是我想要的。
是否有一种方法来解耦两者,也许不引入指针?我认为new
和delete
只在指针中有效。更确切地说,是否有一种方法可以将该类的内容传递给deque
,然后删除它,而不影响deque
中的内容?
与其使用原始指针,不如考虑使用Boost指针容器库:
提振。指针容器提供了用于保存堆分配的容器对象以异常安全的方式并以最小的开销。这样做的目的该库的主要目的是使c++中的面向对象编程更加容易通过建立一套标准的类、方法和设计处理OO特定问题
但是如果:
这是一个有效的选择:the stored objects are not shared, but owned exclusively, or the overhead implied by smart pointers is inappropriate
否则,如果您的图像文件指针是共享的,请考虑使用注释中指出的std::shared_ptr
。
如果Boost指针容器符合您的需求,您可以使用Boost::ptr_deque
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- Deque指针内存泄漏
- deque中指针的自定义比较器
- 空的deque与未使用的指向deque的指针
- New和delete操作符不影响指向该类的指针的Deque的内容
- 如何获取指向原始数据的std::deque指针
- 函数/方法指针被压入Deque
- 将deque转换为void指针是否安全
- Deque emplace_back指向对象的新指针