是否可以一行代码完成std::vector的new操作及初始化?
你提到的将动态分配std::vector和初始化合并为一行的写法完全可行,这是C++11及更高版本标准提供的合法语法。
语法说明
你给出的示例写法是标准的列表初始化用法:
std::vector<int>* vec = new std::vector<int>(){3, 4};
甚至可以省略冗余的圆括号,简化为以下写法,效果完全一致:
std::vector<int>* vec = new std::vector<int>{3, 4};
两种写法都会在动态分配vector对象的同时,直接用大括号内的元素完成初始化,不需要后续调用push_back逐个插入元素。
注意事项
- 该特性仅支持C++11及以上的标准版本,若使用旧版本编译器需要手动开启对应编译选项,例如GCC/Clang需添加
-std=c++11(或更高版本如-std=c++17)编译参数 - 你给出的分步示例中存在笔误:
vec->puch_back(4)应为vec->push_back(4) - 若没有必须使用裸指针的特殊场景,更推荐直接使用栈上vector对象:
std::vector<int> vec{3, 4};,或用智能指针管理动态分配的vector,避免手动管理内存引发的泄漏、野指针等问题
内容的提问来源于stack exchange,提问作者Hu Xixi
相关产品推荐
相关产品推荐

