无法找到问题的确切答案:
释放内存并再次分配重新分配内存而不使用cstdlib的唯一方法?如果不是这样,那么可能的解决方案是什么?
提前致谢。
答案 0 :(得分:1)
也许你的意思就像用内存加载std :: vector(或其他容器)时所做的那样,删除所有元素,然后调用clear释放内存,然后在其中分配新项,从而分配更多的记忆?在这种情况下,随着容器中的内存增长,容器可以根据需要重新分配其内存。
因为你提到你正在创建一个Vector:
在我们需要执行此操作的项目中,因为我们没有矢量实现(嵌入式),所以通常会分配一大块内存,大于为防止常量内存重新分配所需的内存大小,从而导致大量复制成本并导致内存碎片。一个常见的方案是为app分配一个“合理”的大小,然后在达到限制时加倍。如果用户曾要求缓冲区的大小减小,或者在初始化时设置为大小,那么我们将忽略此启发式并使用请求的大小。
答案 1 :(得分:1)
如果要实现自己的向量类,那么确实需要正确复制向量的内容,而不是使用realloc
,因为在复制对象时你不知道对象本身在做什么(或在C ++ 11中针对相关案例,移动)。想象一下,例如你有一个像这样的对象:
class B;
class A
{
private:
B* bp;
public:
A(B *p) : bp(p)
{
}
};
class B
{
public:
A a;
B() : A(this)
{
...
}
};
MyVector<B> v;
如果将对象复制到其他地址而不调用构造函数,bp
中的A
指针将指向某个“随机”位置。试图找到这将是一个非常讨厌的错误。
[是的,上面的课程中缺少一些东西 - 它不是一个完整的类声明,等等]