C++ realloc函数,用于使用new而不是realloc分配的内存

C++ realloc函数,用于使用new而不是realloc分配的内存,c++,memory-management,C++,Memory Management,我知道有一个函数允许我调整内存块的大小(它与一个空闲函数配对)。但是,我尝试对C++类进行同样的处理,其中一些成员指针使用 < >而不是 ReLoC/。在C++中,是否有一个等价的关键字“强”>ReLoCule,这将允许我在使用新的/DELL而不是Maloc或Realc和FieldUng/P>配对时实现相同的目标? 提前谢谢。不,没有。坦白地说,如果您正在使用new或new[]。你的C++代码可能设计得不好。看看用std::vector代替new[],用value代替new.不,没有。坦白地说

我知道有一个函数允许我调整内存块的大小(它与一个空闲函数配对)。但是,我尝试对C++类进行同样的处理,其中一些成员指针使用<强> < <强> >而不是<强> ReLoC/。在C++中,是否有一个等价的关键字“强”>ReLoCule,这将允许我在使用新的/DELL而不是Maloc或Realc和FieldUng/P>配对时实现相同的目标?
提前谢谢。

不,没有。坦白地说,如果您正在使用new或new[]。你的C++代码可能设计得不好。看看用std::vector代替new[],用value代替new.

不,没有。坦白地说,如果您正在使用new或new[]。你的C++代码可能设计得不好。请看使用std::vector而不是new[],以及使用值而不是new.

我不知道是否存在向量,但您可能会使用向量,因为您只是在调整元素数组的大小:)

std::向量向量向量向量机(1000);//1000个元素作为初始大小
iVector.resize(2500);//将向量大小调整为2500个元素
//或者直接使用它而不用担心内存管理

我不知道是否存在向量,但您可能需要使用向量,因为您只是在调整元素数组的大小:)

std::向量向量向量向量机(1000);//1000个元素作为初始大小
iVector.resize(2500);//将向量大小调整为2500个元素
//或者直接使用它而不用担心内存管理

不。只要使用malloc/realloc/free,有什么问题吗?

不。只要使用malloc/realloc/free,有什么问题吗?

如果我理解你的问题,你有一个分配一些可变长度内存的类。有两种可能的情况:

内存包含C++对象 您别无选择:应该直接或间接地使用new分配内存,因为您需要调用构造函数

如果您希望具有类似realloc的行为,则不要使用new[]。使用std::vector,它将正确处理所有分配/重新分配/释放和构造/销毁

记忆是原始的 您可以使用new[]或malloc,因为您正在分配pod(int数组、short、dumb结构等)

但是,新的[]不会给你一个真实的行为。。。但是,如果您开始使用malloc,那么您必须进行内务管理,即确保在正确的时间拨打免费电话,在某处记住阵列的大小,甚至可能有一个与阵列容量不同的大小(即分配更多,以避免进行过多的realloc)

你知道吗?vector已经为您完成了所有这些

结论

你在C++中编码,那么你的问题的解决方案(即在一个类中分配可变长度内存),如先前的答案所表示的,使用STD::Vector .< /P> < P>如果我理解你的问题,你有一个分配了一些可变长度内存的类。有两种可能的情况:

内存包含C++对象 您别无选择:应该直接或间接地使用new分配内存,因为您需要调用构造函数

如果您希望具有类似realloc的行为,则不要使用new[]。使用std::vector,它将正确处理所有分配/重新分配/释放和构造/销毁

记忆是原始的 您可以使用new[]或malloc,因为您正在分配pod(int数组、short、dumb结构等)

但是,新的[]不会给你一个真实的行为。。。但是,如果您开始使用malloc,那么您必须进行内务管理,即确保在正确的时间拨打免费电话,在某处记住阵列的大小,甚至可能有一个与阵列容量不同的大小(即分配更多,以避免进行过多的realloc)

你知道吗?vector已经为您完成了所有这些

结论

你在C++中编码,那么你的问题的解决方案(即在一个类中分配可变长度内存),如先前的答案所表达的,使用STD::vector。< /p> < P>看看向量如何使用新的初始化来初始化、复制(移动)和破坏对象,这些内存在原则上是“重新分配”的。在实现像vector这样的东西时需要做大量的工作,所以我要说的是简单地使用vector。。。它对所有对象使用一个连续的内存块,因此您可以将其与期望数组的函数一起使用。而且,它隐式地为您跟踪对象的数量

当然,这种便利是有代价的——它在后台在堆上分配内存。 因此,如果您完全知道您只需要一个大小合理的阵列,那么堆栈上的阵列在速度上是无法匹敌的


看一看vector如何使用placement new来初始化、复制(移动)和销毁内存中的对象,这些对象原则上是“重新定位”的。在实现像vector这样的东西时需要做大量的工作,所以我要说的是简单地使用vector。。。它对所有对象使用一个连续的内存块,因此您可以将其与期望数组的函数一起使用。而且,它隐式地为您跟踪对象的数量

当然,这种便利是有代价的——它在后台在堆上分配内存。 因此,如果您完全知道您只需要一个大小合理的阵列,那么堆栈上的阵列在速度上是无法匹敌的


在C++代码中使用普通的“新”没有什么错,尽管它可能会用于与Booo::SydDypTR或其他Boost智能指针类的一个组合中。如果你知道你在做什么,它就没有什么问题。但是,使用值应该是首选。有时值不是一个可行的选项(例如,在多个对象之间共享的C++对象)。
std::vector<char> iVector(1000); // 1000 element as initial size

iVector.resize(2500); // resize the vector to 2500 elements

// or just use it without worrying about memory management