- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自从过去两天以来,我一直在解决一个问题,但作为一个相当缺乏经验的程序员,我认为这是正常的。我的问题可能有一个简单的解决方案,但我找不到快速引用,所以决定问问其他人。
在应用程序的一个线程中,我使用 new
创建了一个指向用户定义类的指针。紧随其后,我使用 push_back()
方法将新创建的指针推送到指向此用户定义类的指针的 deque
中。
关注的这个双端队列已经从应用程序的主函数传递到这个线程,这个用户定义类的内容在主循环中处理。因此,当一个新指针进入双端队列时,它会在主线程中被获取并使用。
我的问题是我需要确保分配给此类内容的内存在使用后应该被释放,因为它们存储非常大的图像数组。否则,程序崩溃。为此,我在线程中调用 push_back()
后立即使用了 delete
,假设内存最终是空闲的,但仅存储在 deque 中
。但是,显然,deque
中指针指向的地址的内容也被删除了。这不是我想要的。
有没有办法将两者解耦,也许不引入指针?我认为 new
和 delete
只在指针中有效。更准确地说,有没有办法将此类的内容传递给 deque
然后删除它,而不影响 deque
中的内容?
最佳答案
不使用原始指针,考虑使用 Boost Pointer Container Library :
Boost.Pointer Container provides containers for holding heap-allocated objects in an exception-safe manner and with minimal overhead. The aim of the library is in particular to make OO programming easier in C++ by establishing a standard set of classes, methods and designs for dealing with OO specific problems
但这是一个有效的选择,如果:
the stored objects are not shared, but owned exclusively, or
the overhead implied by smart pointers is inappropriate
否则,如果您的图像文件指针是共享的,请考虑使用评论中指出的 std::shared_ptr
。
如果 Boost Pointer Container 符合您的需要,您可以使用 boost::ptr_deque
关于c++ - New 和 delete 运算符对指向此类的指针的双端队列的内容没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461368/
我是一名优秀的程序员,十分优秀!