C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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中的Realloc等价物全部内容,希望文章能够帮你解决C中的Realloc等价物所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。