C++ 销毁新的呼叫位置

C++ 销毁新的呼叫位置,c++,new-operator,placement,C++,New Operator,Placement,我有一个基本问题 通常,使用placement new,我们可以在预先分配的内存上构造对象 举个例子:My_类大小为20字节,希望为5个对象创建一个池。因此,已经分配了5*20=>100个字节,并且池的起始地址是0x1234 现在,使用placement new,我在内存池中放置了3个对象 我的问题是, 有了起始地址0x1234,是否仍然可以找到 池中的有效对象数 如果我毁了第二个 对象,系统如何知道第二个对象中要创建的下一个对象 职位等等 在本讨论中,单词“pool”用于表示某种预先分配的内存

我有一个基本问题

通常,使用placement new,我们可以在预先分配的内存上构造对象

举个例子:My_类大小为20字节,希望为5个对象创建一个池。因此,已经分配了5*20=>100个字节,并且池的起始地址是0x1234

现在,使用placement new,我在内存池中放置了3个对象

我的问题是,

  • 有了起始地址0x1234,是否仍然可以找到 池中的有效对象数

  • 如果我毁了第二个 对象,系统如何知道第二个对象中要创建的下一个对象 职位等等


  • 在本讨论中,单词“pool”用于表示某种预先分配的内存,该内存应包含一组特定类型的对象(可以是一个类,也可以是不同的类,相关或不相关)

  • 也许吧。这完全取决于池本身是如何设计和实现的

  • 池,假设一个支持这种操作的正确且有效的实现,将跟踪空闲空间的位置、大小等

    这通常的工作方式是在池的元数据中存储一个指针(换句话说,关于池本身的数据,知道池的大小、分配了多少元素等),它是池中自由元素链接列表的头。这只是一个解决方案,但却是一个相当普遍的解决方案


  • 请注意,这种情况与从堆中分配的常规
    new
    完全没有区别,除非您有一个能够跟踪池中元素数量的特定池,而普通堆不允许您直接这样做(您可能最清楚地知道总共有多少个分配,但从文件缓冲区分配和动态字符串到类型为X、类型为Y的对象——堆本身不跟踪特定分配的目的,这是“其他人的问题”)。

    请显示与第2点相关的代码。什么“系统”你说的是这里吗?我的意思是C++引擎/核心系统,当你使用一个需要你知道你在做什么的系统时,“核心”不能保护你。系统什么都不知道。你必须为它编写代码。