gpt4 book ai didi

c++ - New 和 delete 运算符对指向此类的指针的双端队列的内容没有影响

转载 作者:行者123 更新时间:2023-11-30 04:18:22 24 4
gpt4 key购买 nike

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

在应用程序的一个线程中,我使用 new 创建了一个指向用户定义类的指针。紧随其后,我使用 push_back() 方法将新创建的指针推送到指向此用户定义类的指针的 deque 中。

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

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

有没有办法将两者解耦,也许不引入指针?我认为 newdelete 只在指针中有效。更准确地说,有没有办法将此类的内容传递给 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com