New和delete操作符不影响指向该类的指针的Deque的内容

New and delete operators without effect on the contents of a Deque of pointers to this class

本文关键字:指针 Deque delete 操作符 影响 New      更新时间:2023-10-16

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

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

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

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

是否有一种方法来解耦两者,也许不引入指针?我认为newdelete只在指针中有效。更确切地说,是否有一种方法可以将该类的内容传递给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