C中的Realloc等价物

前端之家收集整理的这篇文章主要介绍了C中的Realloc等价物前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是的,另一个realloc vs. std :: vector问题.我知道你要说什么,我同意,忘记手动内存分配,只需使用std :: vector.不幸的是,我的教授禁止我使用STL的任何东西进行这项任务.

所以是的,我有一个动态的T数组,我需要它可以调整大小,我不能使用std :: vector.我可以回到黑暗时代,用malloc和家庭来完成整个事情,但是如果我可以使用新的那将是非常棒的.

我已经阅读了大量的帖子,其中每个人都说“不,你不能这样做,使用std :: vector”,但是它们都是在2011年8月之前发布的,我希望自从有希望之后可能会有所改变. C 11的黎明.告诉我,我运气好,还是我必须恢复到C风格的内存分配?

解决方法

无论如何你应该完全避免重新分配,因为你不能像这样移动C对象.

>使用buf = new unsigned char [sizeof(T)* capacity]创建新缓冲区
>将分配的无符号字符*转换为T *,并从现在开始使用这些T指针
>通过“placement new”构建新元素,如new(& buf [i])T(original_copy)
>要将缓冲区复制到更大的缓冲区,首先分配新缓冲区,使用std :: uninitialized_copy(不是std :: copy),然后使用buf [i] .~T()销毁旧文件中的元素并取消分配使用delete [] buf的旧缓冲区.

所有这一切都假设您不必担心异常安全,这对于分配来说可能是可以的.请注意,在现实世界的代码中,您必须保证异常安全,而且比这更乏味.

猜你在找的C&C++相关文章