1

自过去两天以来,我一直在解决一个问题,但作为一个相当缺乏经验的程序员,我认为这很正常。我的问题可能有一个简单的解决方案,但我找不到快速参考,所以决定问其他人。

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

这个被关注的双端队列已经从应用程序的主函数传递到这个线程,这个用户定义类的内容在主循环中处理。因此,当一个新指针进入双端队列时,它会被主线程接收并使用。

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

有没有办法将两者解耦,也许不引入指针?我认为new并且delete仅在指针中有效。更准确地说,有没有办法将这个类的内容传递给deque然后删除它,而不影响deque?

4

1 回答 1

2

不要使用原始指针,而是考虑使用Boost Pointer Container Library

Boost.Pointer Container 以异常安全的方式和最小的开销提供了用于保存堆分配对象的容器。该库的目的特别是通过建立一组标准的类、方法和设计来处理 OO 特定问题,从而使 C++ 中的 OO 编程更容易

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

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

于 2013-05-09T12:14:16.000 回答