
所以是的,我有一个动态的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等价物所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)