vector 的resize 与reserve的区别

来源:互联网 发布:编程命名法 编辑:程序博客网 时间:2024/04/23 22:56

       今天写了一段代码,需要传递一段缓冲数组给类似于这样一个函数fun(char *buf,int size),我定义了一个vector<char>buffer,然后buffer.reserve(1024),主要是为了与分配内存,避免后面发生内存重新分配。然后我这样调用,fun(&buffer[0],buffer.capacity()),程序运行到这里的时候,弹出了个assert框,大概意思是说我的vector发生了越界访问,百思不得其解。后来我突然想起,reserver只是预分配了一段内存,一段没有初始化的内存,换言之,程序这时候不知道要以什么方式去读取这段内存的,而resize,则不仅仅把内存置为指定大小,还会在补足的内存上构造对象。不过,这也仅仅是Debug的时候会发生assert而已,估计release是不会有问题的,明天试试看。

原创粉丝点击