gpt4 book ai didi

c++ - 我正在用 placement new 做一些时髦的事情,但事情都失败了。解决方法?

转载 作者:行者123 更新时间:2023-11-30 01:31:19 24 4
gpt4 key购买 nike

我有一个非常大的、分散的类,它本质上是一个非常人为设计的二维链表。我希望能够“编译”它,我的意思是我想完成列表,以便只进行读取访问,然后将所有元素移动到连续的内存空间中。我的粗略解决方案是这样的:

#include <new>
...
MyListNode* pool = new MyListNode[length];
new(&pool[position]) MyListNode();

问题是我基本上有两个类,一个用 new 分配,另一个用这里的方法分配,当我试图删除任何由上述方法分配的对象时,glibc 终止了程序,因为无效指针。

自然的解决方案是创建两个类,并仅使用运行时多态性来提供一个接口(interface)和两个实现,等等。C++ 中的内存标准有没有办法允许这种诡计?

最佳答案

最明显的可能性是检查对象的地址,并且仅当它落在您的池之外时才将其删除。如果我这样做,我想我可能会为该类重载 operator new,并让它始终从您的池中分配空间。通过这种方式,您无需复制即可获得连续分配,并且您的对象是统一分配的,因此您也可以统一删除它们。

关于c++ - 我正在用 placement new 做一些时髦的事情,但事情都失败了。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276284/

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