C++ vector按值传递的实现原理是什么?
C++ vector按值传递的底层逻辑
vector本质上不是动态数组本身,而是一个轻量的管理对象,内部通常包含三个核心成员:
- 指向底层动态数组起始位置的指针
- 指向数组中已用元素末尾后一位的指针
- 指向已分配内存末尾的指针
当你按值传递vector时,会触发vector的拷贝构造函数,这个函数的核心行为是:
- 为副本重新分配一块与原vector底层数组容量匹配的新内存
- 将原vector中的所有元素逐个复制到这块新内存中
- 让副本的三个内部指针指向新分配的内存区域
这就保证了副本和原vector的底层数组完全独立,修改副本不会影响原对象。
举个直观的代码示例:
#include <vector> #include <iostream> void modify_vec(std::vector<int> vec_copy) { vec_copy.push_back(100); std::cout << "副本元素数量:" << vec_copy.size() << "\n"; } int main() { std::vector<int> original = {1, 2, 3}; modify_vec(original); std::cout << "原vector元素数量:" << original.size() << "\n"; return 0; }
运行这段代码会输出:
副本元素数量:4 原vector元素数量:3
可见副本的修改完全不会影响原vector,因为它们的底层内存是分开的。
简单来说,vector的拷贝构造函数实现了深拷贝——它复制的是底层数组的内容,而非仅仅复制指针,这就是按值传递能独立工作的核心原因。
内容的提问来源于stack exchange,提问作者Amirreza Nadi Chaghadari
相关产品推荐
相关产品推荐

